TP6 n ary tree: Fix some memleaks
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 6 Apr 2017 09:55:15 +0000 (11:55 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 6 Apr 2017 09:55:15 +0000 (11:55 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP6/arbres/arbre_n_aire/arbre_n_aire.c
TP6/arbres/arbre_n_aire_c1/arbre_n_aire_correction.c
TP6/arbres/arbre_n_aire_c2/arbre_n_aire_correction.c

index 7713d7218ae1ae1d6dce1b7446dabbf69ec7860e..163412d741e170032ee2d889e77ef1e235a51588 100644 (file)
@@ -61,7 +61,7 @@ NOEUD *insere(NOEUD * p, char *mot, int i)
     if (p == NULL) {
        return insere_fin(mot, i);
     } else if (p->lettre == mot[i]) {
-       if (mot[i]) {
+       if (mot[i] == '\0') {
            p->fils = insere(p->fils, mot, i + 1);
        } else {
            printf("The word is already here\n");
index ebffbaa4c139e2fdf99430a6830dcd0f7afa9679..1d972b2eb759091ef3e11ec2e7a2a2d53fb110f6 100644 (file)
@@ -153,6 +153,7 @@ NOEUD *supprime(NOEUD * p, char *mot, int i)
     return p;
 }
 
+
 /*****************************************************************************/
 NOEUD *charge_dico(char *nom_fichier, int *nb_mots)
 {
@@ -175,6 +176,20 @@ NOEUD *charge_dico(char *nom_fichier, int *nb_mots)
 }
 
 
+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;
+    }
+}
+
+
 /*****************************************************************************/
 void sauve_dico(NOEUD * p, char *nom_fichier, int nb_mots)
 {
@@ -263,6 +278,7 @@ int main(int argc, char *argv[])
     } while (strcmp(mot, "0"));
 
     /* affiche_fich(stdout,arbre,mot,0); */
+    detruis_arbre(arbre);
 
 }
 
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);
 }
 
 /****************************************************************************/