La
fonction free libère une zone mémoire créée
péalablement par les
fonctionsmalloc ou calloc. Elle permet
de diminuer les risque d’être à court de mémoire. Elle admet
l’adresse de cette zone mémoire en
paramètre (aucun effet si le pointeur est nul).
Attention, les pointeurs pentier
et ptable ne sont pas modifiés ; ils gardent leur valeurs à
l’issu de l’appel de free (ils ne sont pas mis à NULL, ce qui
aurait été plus sûr).
Notez que l’on n’a pas besoin de passer la taille de la zone
libérée ; le langage C est capable de se débrouiller sans.
Offrir une fonction
free dans un langage est toujours source de problèmes.
Voici quelques erreurs possibles :
Continuer à accéder à un objet libéré (accès via le
même pointeur
ou un autre pointeur.
La zone mémoire
qu’il occupait a pu être réallouée.
Vouloir libérer 2 fois la même zone (2 appels
consécutifs à free avec deux pointeurs
ayant la même valeur). L’effet est imprévisble.
Appeler free avec un pointeur
qui ne pointe pas sur une zone allouée par malloc ou
calloc.
On tente d’opérer hors du tas.
Pour éviter ces problèmes, certains langages (mais pas le
C) fournissent une récupération automatique des zones de
mémoire
allouées et devenues inutiles (plus de pointeurs
sur la zone). Ce mécanisme est appelé ramasse-miettes ou
garbage collector. Mais ces langages limitent les
opérations possibles sur les pointeurs
(pas d’opération arithmétique, pas de d’affectation).