--- rpl/src/gestion_variables.c 2012/10/01 11:05:02 1.57 +++ rpl/src/gestion_variables.c 2012/10/03 14:53:11 1.58 @@ -426,6 +426,7 @@ ajout_variable(struct_processus *s_etat_ } (*(*s_etat_processus).s_arbre_variables).feuille = NULL; + (*(*s_etat_processus).s_arbre_variables).feuille_statique = NULL; (*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0; (*(*s_etat_processus).s_arbre_variables).indice_tableau_pere = -1; (*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL; @@ -476,6 +477,9 @@ ajout_variable(struct_processus *s_etat_ (*(*l_variable_courante).noeuds[(*s_etat_processus) .pointeurs_caracteres_variables[*ptr]]).feuille = NULL; (*(*l_variable_courante).noeuds[(*s_etat_processus) + .pointeurs_caracteres_variables[*ptr]]).feuille_statique + = NULL; + (*(*l_variable_courante).noeuds[(*s_etat_processus) .pointeurs_caracteres_variables[*ptr]]).noeuds_utilises = 0; // Le champ noeud_pere de la structure créée pointe sur @@ -1292,7 +1296,8 @@ retrait_variable(struct_processus *s_eta [(*(*variable_a_supprimer).noeud).indice_tableau_pere])) .feuille = NULL; - while((*s_arbre_courant).noeuds_utilises == 0) + while(((*s_arbre_courant).noeuds_utilises == 0) && + ((*s_arbre_courant).feuille_statique == NULL)) { s_arbre_a_supprimer = s_arbre_courant; s_arbre_courant = (*s_arbre_courant).noeud_pere; @@ -1666,13 +1671,16 @@ void liberation_arbre_variables(struct_processus *s_etat_processus, struct_arbre_variables *arbre, logical1 retrait_definitions) { - int i; + int i; + + struct_liste_chainee *l_element_courant_liste; + struct_liste_chainee *l_element_suivant_liste; - struct_liste_chainee *l_element_courant_liste; - struct_liste_chainee *l_element_suivant_liste; + struct_liste_variables *l_element_courant; + struct_liste_variables *l_element_suivant; - struct_liste_variables *l_element_courant; - struct_liste_variables *l_element_suivant; + struct_liste_variables_statiques *l_element_statique_courant; + struct_liste_variables_statiques *l_element_statique_suivant; // Libération de l'arbre des variables. Le contenu des variables n'est // pas détruit par cette opération, il sera détruit lors de la libération @@ -1697,6 +1705,19 @@ liberation_arbre_variables(struct_proces (*arbre).feuille = NULL; } + l_element_statique_courant = (*arbre).feuille_statique; + + while(l_element_statique_courant != NULL) + { + l_element_statique_suivant = (*l_element_statique_courant).suivant; + + free((*(*l_element_statique_courant).variable).nom); + liberation(s_etat_processus, (*(*l_element_statique_courant) + .variable).objet); + + l_element_statique_courant = l_element_statique_suivant; + } + for(i = 0; i < (*s_etat_processus).nombre_caracteres_variables; i++) { if ((*arbre).noeuds[i] != NULL)