Article View: fr.comp.lang.c
Article #15359Re: Tableau: diff�rence entre pile et tas
From: Yves ROMAN
Date: Fri, 30 Sep 2005 13:07
Date: Fri, 30 Sep 2005 13:07
67 lines
3984 bytes
3984 bytes
<dab@acri-st.fr> a �crit dans le message de news:
1128082651.908510.81550@o13g2000cwo.googlegroups.com...
> J'ai essay� en traitant mes 2 tables comme 2 vecteurs de pointeurs.
donc : t_sorted_grid_point** distTable ;
> J'ai chang� le prototype de ma fonction: computeNeighbors comme ceci:
> void computeNeighbors(t_grid_point* gridPointTable[], int
> gridPointTableSize,
> t_sorted_grid_point* distTable[]);
Ok : c'est coherent avec la d�claration
> J'acc�de � chaque �lement ainsi distTable[x*NB_NEIGHBOR+y].
Non : ici tu le traites comme une matrice plate : distTable[z] est un
pointeur vers t_sorted_grid_point. Je me demande comment �a peut compiler !
Il faut y acc�der par distTable[x][y] :
distTable[x] est un pointeur vers t_sorted_grid_point (ou vers un
vecteur)
distTable[x][y] est le y�me de ce vecteur et donc bien un
t_sorted_grid_point
> J'ai modifi� le code en fonction et je fais des malloc pour cr�er
> chaque t_sorted_grid_point au moment ou je l'ins�re et �a marche.
Ok pour l'allocation
> Mais je ne sais toujours pas d'ou proviens l'erreur.
>
> 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?
Tout d�pend de la fa�on de d�clarer ta variable.
Si tu la d�clares en Type Table[LIGNES][COLONNES] , il va effectivement
supposer la m�moire contigue et chercher l'�lement � la position
x*COLONNES+y
Dans ce cas la zone utilis�e contient les LIGNESxCOLONNES �l�ments.
Si tu la d�clares en Type **Table (et si tu l'alloues correctement), il va
partir de l'adresse contenue dans Tables et chercher la valeur contenue dans
la position x (qui est un pointeur) puis, � partir de cette nouvelle adresse
chercher l'�lement contenu dans la position y.
Table[x][y] est alors une traduction de *(*(Table+x))+y)
Dans ce cas, il y a une zone allou�e pour LIGNES pointeurs, et chacun pointe
vers une zone allou�e contenant COLONNES �l�ments.
M�me si on utlise la m�me notation Table[x][y] pour y acc�der dans les 2
cas, les m�canismes utilis�s sont diff�rents.
C'est l'�ternel probl�me de similitude de syntaxe entre tableaux et
pointeurs en C, alors que ce sont 2 choses totalement diff�rentes.
>
> Si on alloue distTable ainsi, comment est-ce qu'on peut allouer aux
> �l�ments du tableau en utilisant quelque chose comme (*distTable[x
> ])[y ] ?
>
> distTable = malloc(NB_MAX_GRID_POINT*sizeof(void *));
> for(inc=0; inc<NB_MAX_GRID_POINT; inc++) {
> distTable[inc] =
> malloc(NB_NEIGHBOR*sizeof(t_sorted_grid_point));
> }
tu y acc�des simplement par distTable[x][y]
Technical Details
Message-ID:
<dhjd83$vbm$1@s1.news.oleane.net>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!134.158.69.22.MISMATCH!in2p3.fr!oleane.net!oleane!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!news2.google.com!proxad.net!134.158.69.22.MISMATCH!in2p3.fr!oleane.net!oleane!not-for-mail From: "Yves ROMAN" <yves.roman@NO.unilog.SPAM.fr> Newsgroups: fr.comp.lang.c Subject: Re: Tableau: diff�rence entre pile et tas Date: Fri, 30 Sep 2005 15:07:32 +0200 Organization: Guest of France Telecom's news reading service Lines: 69 Message-ID: <dhjd83$vbm$1@s1.news.oleane.net> 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: cerbere.unilog.fr X-Trace: s1.news.oleane.net 1128085571 32118 194.3.185.2 (30 Sep 2005 13:06:11 GMT) X-Complaints-To: abuse@oleane.net NNTP-Posting-Date: Fri, 30 Sep 2005 13:06:11 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-RFC2646: Format=Flowed; Original