begin process at 2008 08 20 14:35:52
1 228 884 membres
250 nouveaux aujourd'hui
14 258 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : mémoire en trop [ Archives / Au secours ] (deck_bsd)

mémoire en trop le 17/02/2006 20:10:48

deck_bsd
Membre Club
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.


Re : mémoire en trop le 17/02/2006 21:10:23

darkpoulpo

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);
}


Re : mémoire en trop le 17/02/2006 21:12:37

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


Classé sous : fichier, mémoire, in, trop, ptcur

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS