Dans ce programme, la mémoire allouée est correctement libérée. Il n'y a pas de fuite de mémoire ici. Si le programme occupe toujours de l'espace mémoire après avoir utilisé "free", cela provient d'une raison externe au code.
Pour s'en convaincre, on peut remplacer les appels à "malloc" et "free" par des appels à ces fonctions :
1 2 3 4 5 6 7 8 9 10 11 12 13
| void * malloc_verbeux (int taille)
{
void * adresse_memoire;
adresse_memoire = malloc (taille);
printf ("mall %p\n", adresse_memoire);
return adresse_memoire;
}
void free_verbeux (void * adresse_memoire)
{
free (adresse_memoire);
printf ("free %p\n", adresse_memoire);
} |
Ainsi, il est facile de s'assurer que les zones mémoires allouées sont bien libérées, du moins tant que le nombre d'allocations ne dépasse pas 5.
Remarque 1 : Lors de la création d'un nouvel élément de liste, il serait judicieux d'initialiser son pointeur "nextChar" à la valeur "NULL".
Remarque 2 : Il est inutile de passer l'adresse de la variable "i" en argument à la fonction "printf". Par exemple, cet appel à la ligne 19 :
printf ("je vais prendre de la memoire\n", &i );
serait avantageusement remplacé par :
printf ("je vais prendre de la memoire\n");
Remarque 3 : Il est recommandé de tester la valeur de retour de la fonction "malloc", afin de s'assurer que l'allocation mémoire s'est bien déroulée. Elle peut en effet échouer si il n'y a plus assez de mémoire libre. Voici un exemple de code :
1 2 3 4
| int * adresse_memoire;
adresse_memoire = malloc (sizeof (int));
if (adresse_memoire == NULL)
exit(EXIT_FAILURE); |
Remarque 4 : Il est préférable d'utiliser l'une des constantes "EXIT_SUCCESS" ou "EXIT_FAILURE" prédéfinies dans l'entête "stdlib.h" pour désigner la valeur de retour du programme. Autrement dit, dans la fonction "main", il est préférable de remplacer
par
Remarque 5 : En langage C, il est préférable d'écrire explicitement les arguments de la fonction "main". Autrement dit, il est préférable de remplacer
par
Partager