Salut a tous !

Je suis sur un prog qui construit et evalue des arbres.

Mon prog marche (pour l'instant..) mais valgrind en memcheck -v me fait un peu peur..
Sur un exemple tout con, il m'indique 29 erreurs..
==8945== IN SUMMARY: 29 errors from 29 contexts (suppressed: 15 from 1)


Toutes les erreurs sont dues a la liberation..

Exemple qui fait foirer :

on defini une fonction par un arbre avec des parametre :
f(x,y) = * x y

et et calcule ensuite
f@2 1 2
(@2 pour dire qu'il y a 2 parametres)

et ca donne 2 (miracle)

voici une des erreurs valgrind :

==8945== 1 errors in context 1 of 29:
==8945== Invalid free() / delete / delete[]
==8945== at 0x1B903349: free (vg_replace_malloc.c:153)
==8945== by 0x804A34D: __libereArbre (analyse.c:1122)
==8945== by 0x804A326: __libereArbre (analyse.c:1119)
==8945== by 0x804A365: libereArbre (analyse.c:1127)
==8945== Address 0x1BA3A620 is 0 bytes inside a block of size 20 free'd
==8945== at 0x1B903349: free (vg_replace_malloc.c:153)
==8945== by 0x804A34D: __libereArbre (analyse.c:1122)
==8945== by 0x804A365: libereArbre (analyse.c:1127)
==8945== by 0x804996F: constructionArbre (analyse.c:779)


ma fonction des liberation :
void __libereArbre(Arbre a) {
if(a == NULL ) return;
__libereArbre(a->fg);
__libereArbre(a->fd); /*LIGNE 1119*/
if(a->type == SYMB)
free(a->contenu.symb);
free(a); /*LIGNE 1122*/
return;
}

void libereArbre(Arbre * a) {
__libereArbre(*a);
*a = NULL;
return;
}

ou faut il que j'aille chercher ?
dans la construction de l'arbre ?
Ce sont des lectures or de l'espace alloué ?

a+