🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15360

Re: Tableau: différence entre pile et tas

#15360
From: Antoine Leca
Date: Fri, 30 Sep 2005 13:52
49 lines
3879 bytes
En <news:1128082651.908510.81550@o13g2000cwo.googlegroups.com>,
David va escriure:
> Mais je ne sais toujours pas d'ou proviens l'erreur.

int main(int argc, char* argv[]) {
t_grid_point** gridPointTable = NULL;
t_sorted_grid_point** distTable = NULL;

En C, un pointeur est un moyen d'acc�der � un �l�ment quelqconque au milieu
d'un tableau. Ceci implique qu'� un moment o� un autre, tu alloues
effectivement ce tableau (malloc() ou d�finition avec []).
Jusque l�, pas de souci, n'est-ce-pas?

Maintenant, un pointeur double, cela fonctionne exactement de la m�me
mani�re ! Le pointeur � interne � (ceux qui ont pour type t_grid_point* ou
t_sorted_grid_point*) pointe au milieu d'un tableau, que tu alloues avec
malloc(). Pas (vraiment) de souci, tu alloues une pl�thore de ces
tableaux-l� d'un seul coup, mais sur le principe c'est pareil.
Le pointeur � externe � (ceux qui ont un nom dans ton exemple ci-dessus,
gridPointTable et distTable), de la m�me mani�re, pointe au milieu d'un
tableau ; les �l�ments de ce tableau sont, logiquement, des pointeurs.

Or, si tu r�fl�chis, ces deux tableaux de pointeurs, tu ne leur as jamais
allou�s de m�moire ! (OK, en fait c'est plus confus que cela ; tu peux
r�viser les explications d'Yves pour le d�tail.) Alors bien s�r, SIGSEGV.



> Quand on utilise cette notation distTable[x][y], le compilo
> consid�re-t-il automatiquement que la m�moire est contigu quelle que
> soit la mani�re dont a �t� initialis� distTable?

Non. En fait, le grand int�r�t d'utiliser cette notation est que cela force
l'utilisation interm�diaire d'un tableau de pointeurs, ce qui permet de
s'affranchir de cette obligation de continuit�.
Le prix � payer, c'est l'espace suppl�mentaire pour le tableau
interm�diaire.

C'est tr�s diff�rent de ce que propose Fortran ou Pascal, o� les tableaux �
deux dimensions (qui ont une syntaxe similaire, mais les ressemblances
s'arr�tent l�) sont en fait un espace continu, et le compilateur programme
automatiquement un calcul d'indice.
En C, il n'existe pas de tableau � deux dimensions du tout ; pour obtenir le
m�me r�sultat, il faut faire le calcul d'indice toi-m�me, avec des trucs
comme distTable[x*NB_MAX_GRID_POINT+y]. Et comme tu le vois, l� il n'y a
plus qu'un seul tableau, donc _pas_ de tableau interm�diaire de pointeurs.


Antoine
Technical Details
Message-ID: <dhjfv8$3oi$1@shakotay.alphanet.ch>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!212.101.4.254.MISMATCH!solnet.ch!solnet.ch!news-zh.switch.ch!switch.ch!news.imp.ch!news.imp.ch!80.83.46.147.MISMATCH!news.alphanet.ch!alphanet.ch!not-for-mail
References: <1127923112.347881.79740@z14g2000cwz.googlegroups.com> <1128006219.590857.313500@g47g2000cwa.googlegroups.com> <dhh0u1$nn7$1@s1.news.oleane.net> <1128082651.908510.81550@o13g2000cwo.googlegroups.com>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,9ee84542aed426f5
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!212.101.4.254.MISMATCH!solnet.ch!solnet.ch!news-zh.switch.ch!switch.ch!news.imp.ch!news.imp.ch!80.83.46.147.MISMATCH!news.alphanet.ch!alphanet.ch!not-for-mail
From: "Antoine Leca" <root@localhost.invalid>
Newsgroups: fr.comp.lang.c
Subject: Re: Tableau: différence entre pile et tas
Date: Fri, 30 Sep 2005 15:52:38 +0200
Organization: Posted through ALPHANET (http://www.alphanet.ch/)
Lines: 50
Sender: antoinel@143.red-217-127-250.staticip.rima-tde.net
Message-ID: <dhjfv8$3oi$1@shakotay.alphanet.ch>
References: <1127923112.347881.79740@z14g2000cwz.googlegroups.com>   <1128006219.590857.313500@g47g2000cwa.googlegroups.com>   <dhh0u1$nn7$1@s1.news.oleane.net> <1128082651.908510.81550@o13g2000cwo.googlegroups.com>
NNTP-Posting-Host: 143.red-217-127-250.staticip.rima-tde.net
Mime-Version: 1.0
Content-Type: text/plain;
 charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: shakotay.alphanet.ch 1128088361 3858 217.127.250.143 (30 Sep 2005 13:52:41 GMT)
X-Complaints-To: usenet@alphanet.ch
NNTP-Posting-Date: Fri, 30 Sep 2005 13:52:41 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1506
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506