FREE |
Libère |
---|---|
Langage C | stdlib.h |
Syntaxe
void free(void *pointeurbloc); |
Paramètres
Nom | Description |
---|---|
pointeurbloc | Ce paramètre permet d'indiquer un pointeur sur le bloc de mémoire à libérer |
Description
Cette fonction permet de libérer un bloc de mémoire.
Algorithme
MODULE FREE(ptr) SI ptr est NULL ALORS RETOURNE immédiatement (ne fait rien) FIN SI SI ptr pointe vers une zone mémoire allouée ALORS Marquer cette zone mémoire comme libre dans le gestionnaire de mémoire Libérer la mémoire associée à ptr Réinitialiser ptr à NULL (optionnel, mais pratique pour éviter les pointeurs pendants) SINON RETOURNE erreur "Tentative de libération de mémoire non allouée" FIN SI |
Remarques
- Risques de double libération : L'appel à free sur le même pointeur plus d'une fois (double free) entraîne un comportement indéfini, pouvant causer des plantages ou des vulnérabilités de sécurité. Pour éviter cela, il est courant de définir le pointeur à NULL après un appel à free, empêchant ainsi un double appel accidentel sur ce pointeur.
- Libération de mémoire allouée dynamiquement : La fonction free est utilisée pour libérer la mémoire allouée dynamiquement avec malloc, calloc, ou realloc. Sans appel à free, la mémoire reste allouée jusqu'à la fin du programme, ce qui peut causer des fuites de mémoire dans des applications de longue durée ou à forte utilisation de mémoire.
- Gestion de la mémoire dans des applications en boucle : Dans les programmes utilisant des allocations répétées, comme les boucles générant de nouvelles données ou structures, l'utilisation de free permet de libérer la mémoire inutilisée entre les itérations. Cela empêche l'accumulation de mémoire inutilisée et optimise les performances en limitant l'utilisation des ressources.
- free sur un pointeur nul : En langage de programmation C, il est sûr d'appeler free sur un pointeur nul. Si le pointeur passé à free est NULL, la fonction ne fait rien et retourne immédiatement, ce qui permet de simplifier le code et d'éviter les vérifications de pointeur avant d'appeler free.
- Libération de mémoire partagée par plusieurs pointeurs : Si plusieurs pointeurs pointent vers la même zone de mémoire allouée, un seul appel à free est nécessaire. Cependant, il faut être prudent dans la gestion de ces pointeurs, car appeler free sur l'un d'eux invalidera l'accès via les autres, ce qui peut entraîner des erreurs de segmentation.
- Impact sur la fragmentation de la mémoire : Dans des programmes longs ou intensifs en allocation, les appels à malloc et free peuvent fragmenter la mémoire, surtout si les allocations sont de tailles variées. Cela peut réduire l'efficacité de l'utilisation de la mémoire et affecter les performances. La gestion efficace de free peut aider à minimiser la fragmentation, mais dans des applications critiques, des gestionnaires de mémoire spécialisés peuvent être préférables.
- Pas de réinitialisation de la mémoire libérée : Après un appel à free, la mémoire est techniquement disponible pour réutilisation, mais elle n'est pas effacée. Cela signifie que les données précédemment entreposées dans cette mémoire peuvent être encore présentes jusqu'à ce qu'un nouveau contenu soit alloué. Dans les applications nécessitant une sécurité accrue, il est parfois recommandé d'effacer explicitement la mémoire avant de la libérer.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- long * tableau1, * tableau2;
- tableau1 = malloc(1000*sizeof(long));
- tableau2 = calloc(1000,sizeof(long));
- if(tableau1 != NULL) {
- printf("Libère le tableau1\n");
- free(tableau1);
- }
- if(tableau2 != NULL) {
- printf("Libère le tableau2\n");
- free(tableau2);
- }
- return 0;
- }
on obtiendra le résultat suivant s'il y a assez de mémoire disponible :
Libère le tableau1Libère le tableau2
Voir également
Langage de programmation - C - Allocation de mémoire
Langage de programmation - C - Référence de procédures et fonctions - calloc
Langage de programmation - C - Référence de procédures et fonctions - malloc
Langage de programmation - C - Référence de procédures et fonctions - realloc
Langage de programmation - C++ - Référence de procédures et fonctions - free
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 731.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 111.