Mémoire en trop

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 17 févr. 2006 à 20:10
darkpoulpo Messages postés 76 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 29 novembre 2009 - 17 févr. 2006 à 21:12
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

darkpoulpo Messages postés 76 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 29 novembre 2009
17 févr. 2006 à 21:10
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);
}
0
darkpoulpo Messages postés 76 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 29 novembre 2009
17 févr. 2006 à 21:12
rajouter ptEnd = NULL; à la suite de ptStart = NULL;
0