#26 Le 18/08/2008, à 14:38
- nicolas66
Re : probleme de "free" progammation C
Tiens justement, je viens de rédiger la page de Valgrind dans la doc
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#27 Le 18/08/2008, à 14:51
- klubbin
Re : probleme de "free" progammation C
Voici ce que j'obtient sur mon code C de base ( non celui qu'on m'a proposer) sur la focntion clearListFaits:
==7655==
==7655== Invalid read of size 4
==7655== at 0x8049A17: clearListeFaits (Base_fait.c:169)
==7655== by 0x8049A45: clearListeFaits (Base_fait.c:179)
==7655== by 0x8048EAA: menu (Main.c:175)
==7655== by 0x8049547: main (Main.c:413)
==7655== Address 0x417A178 is 200 bytes inside a block of size 204 free'd
==7655== at 0x402123A: free (vg_replace_malloc.c:233)
==7655== by 0x8049A2E: clearListeFaits (Base_fait.c:175)
==7655== by 0x8048EAA: menu (Main.c:175)
==7655== by 0x8049547: main (Main.c:413)
Comment interpreter cela?
Merci vraiment de votre aide
#28 Le 18/08/2008, à 14:57
- klubbin
Re : probleme de "free" progammation C
//ligne166 void clearListeFaits(ST_FAIT **liste_des_faits)
//ligne167 {
ST_FAIT *supp=NULL;
supp=*liste_des_faits;
if (supp==NULL)
return ;
//ligne173 else
{
free(*liste_des_faits);
liste_des_faits=NULL;
}
return clearListeFaits(&supp->suiv);
//ligne180 }
#29 Le 18/08/2008, à 14:57
- klubbin
Re : probleme de "free" progammation C
//ligne166 void clearListeFaits(ST_FAIT **liste_des_faits)
//ligne167 {
ST_FAIT *supp=NULL;
supp=*liste_des_faits;
if (supp==NULL)
return ;
//ligne173 else
{
free(*liste_des_faits);
liste_des_faits=NULL;
}
return clearListeFaits(&supp->suiv);
//ligne180 }
#30 Le 18/08/2008, à 14:59
- klubbin
Re : probleme de "free" progammation C
//ligne166 void clearListeFaits(ST_FAIT **liste_des_faits)
//ligne167 {
ST_FAIT *supp=NULL;
supp=*liste_des_faits;
if (supp==NULL)
return ;
//ligne173 else
{
free(*liste_des_faits);
liste_des_faits=NULL;
}
return clearListeFaits(&supp->suiv);
//ligne180 }
#31 Le 20/08/2008, à 00:51
- thy
Re : probleme de "free" progammation C
Voici ce que j'obtient sur mon code C de base ( non celui qu'on m'a proposer) sur la focntion clearListFaits:
==7655== ==7655== Invalid read of size 4 ==7655== at 0x8049A17: clearListeFaits (Base_fait.c:169) ==7655== by 0x8049A45: clearListeFaits (Base_fait.c:179) ==7655== by 0x8048EAA: menu (Main.c:175) ==7655== by 0x8049547: main (Main.c:413) ==7655== Address 0x417A178 is 200 bytes inside a block of size 204 free'd ==7655== at 0x402123A: free (vg_replace_malloc.c:233) ==7655== by 0x8049A2E: clearListeFaits (Base_fait.c:175) ==7655== by 0x8048EAA: menu (Main.c:175) ==7655== by 0x8049547: main (Main.c:413)
Comment interpreter cela?
Merci vraiment de votre aide
Cela signifie que tu lis une zone mémoire qui a été libéré,
et effectivement ton appel récursif lit un pointeur libéré.
En l'occurrence le pointeur supp.
Mais une solution plus propre a déjà été proposé dans les premiers posts
Dernière modification par thy (Le 20/08/2008, à 00:52)
Hors ligne
#32 Le 25/08/2008, à 14:40
- klubbin
Re : probleme de "free" progammation C
klubbin a écrit :Voici ce que j'obtient sur mon code C de base ( non celui qu'on m'a proposer) sur la focntion clearListFaits:
==7655== ==7655== Invalid read of size 4 ==7655== at 0x8049A17: clearListeFaits (Base_fait.c:169) ==7655== by 0x8049A45: clearListeFaits (Base_fait.c:179) ==7655== by 0x8048EAA: menu (Main.c:175) ==7655== by 0x8049547: main (Main.c:413) ==7655== Address 0x417A178 is 200 bytes inside a block of size 204 free'd ==7655== at 0x402123A: free (vg_replace_malloc.c:233) ==7655== by 0x8049A2E: clearListeFaits (Base_fait.c:175) ==7655== by 0x8048EAA: menu (Main.c:175) ==7655== by 0x8049547: main (Main.c:413)
Comment interpreter cela?
Merci vraiment de votre aide
Cela signifie que tu lis une zone mémoire qui a été libéré,
et effectivement ton appel récursif lit un pointeur libéré.
En l'occurrence le pointeur supp.Mais une solution plus propre a déjà été proposé dans les premiers posts
AU niveau de la solution proposée je suis d'accord que s'est plus propore et tout.
Mais le probleme est que j'utilisait cette fonction dans d'autre programme sans changer une seule ligne de code et tout fonctionnait trés bien...
De plus j'obtient une erreur comme celle ci a chque utilisaton du free dans mon programme et pas forcement que dans la fonction que je vous est montrer.
Ne serait ce plutot pas un probleme venant du hard par ex?
Merkiiiiii
#33 Le 04/09/2008, à 13:16
- thy
Re : probleme de "free" progammation C
je ne pense pas que ce soit un problème matériel.
Mais si on veux être sur que ce n'est pas ton code qui marche mal, il faudrait que tu nous montre un code simple qui provoque la même erreur.
Par exemple un main qui alloue une chaîne de caractères puis la libéré.
Ça serait bien que tu recompile ton prog avec les symboles de debugage en rajoutant l'option -g aux flags de compile, et que tu redonne ensuite la première erreur que tu avais posté.
Dernière modification par thy (Le 04/09/2008, à 13:46)
Hors ligne