Re: C/realloc

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Guilde
Subject: Re: C/realloc
Patrick Dupré a écrit :
> Ce qui m'etonne c'est que la valeur du pointeur n'est jamais changee
> (sauf apres ce premier appel)
>
> #define NB_PAR 10
> typedef double lineArray [NB_PAR] ;
> typedef lineArray *floatMatrix ;
>
> main () {
>    unsigned long int nb_lines, i ;
>    nb_lines = 0 ;
>    floatMatrix lines = NULL ;
>    for (i = 0 ; i < 5 ; i++) {
>      lines = (floatMatrix) realloc (lines, (++nb_lines) * sizeof
>      (lineArray)) ;
>      printf ("Ptr new: %d\n", lines) ;
>      }
>    }


Tant qu'il y a de la place disponible derrière le pointeur initialement
alloué,
il continue à t'allouer l'espace derrière, et donc le pointeur ne change
pas.
C'est voulu : ça évite de recopier inutilement les données.

Chez moi, si je fais tourner la boucle plus loin, le pointeur change à
l'itération 1689.

Edgar.