fix memory leak when allocating space for the tree
This commit is contained in:
parent
6708ba634b
commit
f7007bbc8d
1 changed files with 10 additions and 3 deletions
13
arbre.c
13
arbre.c
|
@ -9,7 +9,6 @@ void listeVersArbre(Liste *liste) {
|
||||||
printf("Impossible d'allouer de la mémoire supplémentaire (listeVersArbre).\n"); // gestion de l'erreur
|
printf("Impossible d'allouer de la mémoire supplémentaire (listeVersArbre).\n"); // gestion de l'erreur
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/* TODO: TROUVER UN ENDROIT Où FREE CETTE NOUVELLE CELLULE A L'AVENIR */
|
|
||||||
|
|
||||||
nouvelleCellule->gauche = curseur; // membre gauche = curseur
|
nouvelleCellule->gauche = curseur; // membre gauche = curseur
|
||||||
nouvelleCellule->droite = curseur->suivant; // membre droit = élément suivant dans la liste
|
nouvelleCellule->droite = curseur->suivant; // membre droit = élément suivant dans la liste
|
||||||
|
@ -18,7 +17,6 @@ void listeVersArbre(Liste *liste) {
|
||||||
|
|
||||||
curseur = curseur->suivant->suivant; // on va au suivant 2x car on a déjà ajouté le suivant en tant que membre droit
|
curseur = curseur->suivant->suivant; // on va au suivant 2x car on a déjà ajouté le suivant en tant que membre droit
|
||||||
|
|
||||||
/* TODO: FUITE ICI ?? */
|
|
||||||
*liste = curseur; // on change le point de départ de notre liste pour ne pas traiter en boucle les anciennes cellules
|
*liste = curseur; // on change le point de départ de notre liste pour ne pas traiter en boucle les anciennes cellules
|
||||||
ajouterRangee(liste, nouvelleCellule); // on ajoute à la liste notre nouvelle cellule
|
ajouterRangee(liste, nouvelleCellule); // on ajoute à la liste notre nouvelle cellule
|
||||||
curseur = *liste; // on met à jour le curseur
|
curseur = *liste; // on met à jour le curseur
|
||||||
|
@ -46,6 +44,15 @@ void assignationCode(Arbre arbre, int codeActuel, int longueur, Lettre *lettresL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void freeArbre(Arbre arbre) {
|
||||||
|
if (arbre->lettre == '\0') { // free aussi les mini-racines
|
||||||
|
freeArbre(arbre->gauche);
|
||||||
|
freeArbre(arbre->droite);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(arbre); // free du noeud courant
|
||||||
|
}
|
||||||
|
|
||||||
Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale) {
|
Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale) {
|
||||||
Lettre *lettres;
|
Lettre *lettres;
|
||||||
if ((lettres = (Lettre*)malloc(taille * sizeof(Lettre))) == NULL) { // on alloue la liste qui va contenir nos caractères
|
if ((lettres = (Lettre*)malloc(taille * sizeof(Lettre))) == NULL) { // on alloue la liste qui va contenir nos caractères
|
||||||
|
@ -54,7 +61,7 @@ Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale) {
|
||||||
}
|
}
|
||||||
int i = 0; // initialisation de `i` au début car `assignationCode` est récursif
|
int i = 0; // initialisation de `i` au début car `assignationCode` est récursif
|
||||||
assignationCode(arbre, '\0', 0, lettres, &i, tailleTotale); // on commence avec une racine nulle et une taille de 0
|
assignationCode(arbre, '\0', 0, lettres, &i, tailleTotale); // on commence avec une racine nulle et une taille de 0
|
||||||
free(arbre);
|
freeArbre(arbre);
|
||||||
|
|
||||||
return lettres;
|
return lettres;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue