TP6 n ary tree: Fix some memleaks
[Algorithmic_C.git] / TP6 / arbres / arbre_n_aire_c2 / arbre_n_aire_correction.c
index 71cb523144f8091d5ea4cbcbfdccbd047287d2c9..08f4e17f6b3085cc46daab3bc4a5bf25f4b0854e 100644 (file)
@@ -40,7 +40,6 @@ NOEUD *recherche(NOEUD * p, char *mot)
     return cherche(p, mot, 0);
 }
 
-
 /* Création d'une fin de mot - liste chaînée suivant le lien fils **********/
 NOEUD *insere_fin(char *mot, int i)
 {
@@ -153,6 +152,20 @@ NOEUD *supprime(NOEUD * p, char *mot, int i)
     return p;
 }
 
+
+NOEUD *detruis_arbre(NOEUD * p)
+{
+    if (p == NULL)
+       return p;
+    else {
+       p->fils = detruis_arbre(p->fils);
+       p->frere = detruis_arbre(p->frere);
+       free(p);
+       p = NULL;
+       return p;
+    }
+}
+
 /*****************************************************************************/
 NOEUD *charge_dico(char *nom_fichier, int *nb_mots)
 {
@@ -236,7 +249,7 @@ int Lectmot(FILE * fp, char *mot)
 Un exemple d'utilisation :
  ./arbre_n_aire dictionnaire.txt mondico.txt letexte.txt motsinconnus.txt
 
-Les rguments de la ligne de commande sont :
+Les arguments de la ligne de commande sont :
    argv[1] est le nom du dictionnaire d'entree
    argv[2] est le nom du dictionnaire apres insertion des nouveaux mots
    argv[3] est le texte a verifier
@@ -290,7 +303,7 @@ int main(int argc, char *argv[])
 
     sauve_dico(rac, argv[2], nb_mots);
 
-/* pour tester la suppression */
+    /* pour tester la suppression */
     do {
        printf("Entrez un mot a supprimer (stop pour arreter) : ");
        scanf("%s", mot);
@@ -299,6 +312,8 @@ int main(int argc, char *argv[])
            affiche_fich(stdout, rac, mot, 0);
        }
     } while (strcmp(mot, "stop"));
+
+    detruis_arbre(rac);
 }
 
 /****************************************************************************/