Re: C/realloc

Pàgina inicial

Reply to this message
Autor: Patrick Dupre
Data:  
A: Edgar Bonet
CC: Guilde
Assumpte: Re: C/realloc
OK, Merci

Donc, pas de soucis la. En fait j'ai soumis a bug sous buzgilla
car je recupere un segmenation fault lorsque j'effectue une
boucle telle que celle decrite sur un machine x86_64, lorsque le taille
realloue depasse une certaine valeur et lorsque je fais un appel depuis
un programme perl. Sur une machine 32 bit, tout se passe pour le mieux.
En fait, je voulais etre sur que mon observation etait correcte.
Si cela interresse quelqu'un je peux donnex un fichier qui
demontre le probleme. Il faut avoir perl, XS et gcc.

Avis.

>> 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.
>
>


-- 
---
==========================================================================
  Patrick DUPRÉ                      |   |
  Department of Chemistry            |   |    Phone: (44)-(0)-1904-434384
  The University of York             |   |    Fax:   (44)-(0)-1904-432516
  Heslington                         |   |
  York YO10 5DD  United Kingdom      |   |    email: pd520@???
==========================================================================