--- rpl/src/gestion_variables.c 2011/06/17 07:55:59 1.31 +++ rpl/src/gestion_variables.c 2011/06/17 08:47:43 1.32 @@ -178,6 +178,7 @@ ajout_variable(struct_processus *s_etat_ (*(*l_variable_courante).feuille).precedent = (*l_variable_courante).feuille; (*(*l_variable_courante).feuille).noeud_pere = l_variable_precedente; + (*(*l_variable_courante).feuille).noeud = l_variable_courante; // Allocation de la variable sur l'élément de la liste. @@ -736,6 +737,7 @@ retrait_variable(struct_processus *s_eta struct_arbre_variables *s_arbre_a_supprimer; struct_arbre_variables *s_arbre_courant; + struct_arbre_variables *noeud_courant; struct_liste_chainee *l_element_courant; struct_liste_chainee *l_element_precedent; @@ -826,6 +828,7 @@ retrait_variable(struct_processus *s_eta variable_a_supprimer = (*s_etat_processus) .pointeur_feuille_courante; s_arbre_courant = (*variable_a_supprimer).noeud_pere; + noeud_courant = (*variable_a_supprimer).noeud; BUG((*s_arbre_courant).noeuds_utilises == 0, uprintf("Freed node !\n")); @@ -875,6 +878,8 @@ retrait_variable(struct_processus *s_eta (*(*(*s_etat_processus).pointeur_feuille_courante).suivant) .precedent = (*(*s_etat_processus) .pointeur_feuille_courante).precedent; + + noeud_courant = NULL; } // Dans tous les cas, on retire la variable de la liste des variables @@ -939,8 +944,16 @@ retrait_variable(struct_processus *s_eta free((*(*variable_a_supprimer).variable).nom); liberation(s_etat_processus, (*(*variable_a_supprimer).variable).objet); + free((*variable_a_supprimer).variable); erreur = d_absence_erreur; + + if (noeud_courant != NULL) + { + free((*noeud_courant).feuille); + free((*noeud_courant).noeuds); + free(noeud_courant); + } } else {