Mémoire en trop

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
76
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
29 novembre 2009
-
Bonjour,



Voici une procédure charger de remplir un liste chainée en lisant les donnée d'un fichier binaire :



void LectureDuFichier(){

FILE *fichier_in;



printf("\nLECTURE");

ptStart=(element*)malloc(sizeof(element));

ptCur=ptStart;



fichier_in=fopen("stock.gst",0_READ); // "rb" .

while(fread(ptCur,sizeof(element),1,fichier_in)!=0){

if(feof(fichier_in)==0){

ptCur->ptSuivant=(element*)malloc(sizeof(element));

ptCur=ptCur->ptSuivant;

}

}

fclose(fichier_in);

ptEnd=ptCur;

ptEnd->ptSuivant=NULL;



}



En fait cette procédure fonctionne bien, je dirait même trop bien car
elle alloue de la mémoire 1 fois en trop :s . Pourtant j'alloue de la
mémoire supplémentaire tantque l'on est pas arrivé à la fin du fichier
:/ . Cela ne devrait pas allouer de la mémoire en trop.



Quelqu'un peut t-il m'aider svp?



Merci d'avance.

2 réponses

Messages postés
76
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
29 novembre 2009

element *ptStart,*ptEnd;

void LectureDuFichier(){
FILE *fichier_in;
element tmp;
printf("\nLECTURE");
ptStart=NULL;


element **ptCur = &ptStart;

fichier_in=fopen("stock.gst",0_READ); // "rb" .
fread(&tmp,sizeof(element),1,fichier_in);
while(!feof(fichier_in)) {
*ptCur =(element*)malloc(sizeof(element));
memcpy(*ptCur,&tmp,sizeof(element)); //car si fichier vide ca t'evite d'allouer
fread(&tmp,sizeof(element),1,fichier_in);
ptEnd = *ptCur;
ptCur=&(*ptCur)->ptSuivant;
*ptCur = NULL;
}
fclose(fichier_in);
}
Messages postés
76
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
29 novembre 2009

rajouter ptEnd = NULL; à la suite de ptStart = NULL;