Article View: fr.comp.lang.c
Article #15360Re: Tableau: différence entre pile et tas
From: Antoine Leca
Date: Fri, 30 Sep 2005 13:52
Date: Fri, 30 Sep 2005 13:52
49 lines
3879 bytes
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-mailReferences:
<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