Namespaces
Variants

free

From cppreference.net
Défini dans l'en-tête <stdlib.h>
void free ( void * ptr ) ;

Libère l'espace précédemment alloué par malloc() , calloc() , aligned_alloc() , (depuis C11) ou realloc() .

Si ptr est un pointeur nul, la fonction ne fait rien.

Le comportement est indéfini si la valeur de ptr n'est pas égale à une valeur retournée précédemment par malloc() , calloc() , realloc() , ou aligned_alloc() (depuis C11) .

Le comportement est indéfini si la zone mémoire référencée par ptr a déjà été désallouée, c'est-à-dire si free() , free_sized() , free_aligned_sized() (depuis C23) , ou realloc() a déjà été appelé avec ptr comme argument et qu'aucun appel à malloc() , calloc() , realloc() , ou aligned_alloc() (depuis C11) n'a produit un pointeur égal à ptr par la suite.

Le comportement est indéfini si après que free() a retourné, un accès est effectué via le pointeur ptr (à moins qu'une autre fonction d'allocation n'ait produit par coïncidence une valeur de pointeur égale à ptr ).

free est thread-safe : il se comporte comme s'il n'accédait qu'aux emplacements de mémoire visibles via son argument, et non à un stockage statique.

Un appel à free qui désalloue une région de mémoire synchronise-avec un appel à toute fonction d'allocation ultérieure qui alloue la même région ou une partie de la même région de mémoire. Cette synchronisation se produit après tout accès à la mémoire par la fonction de désallocation et avant tout accès à la mémoire par la fonction d'allocation. Il existe un ordre total unique de toutes les fonctions d'allocation et de désallocation opérant sur chaque région de mémoire particulière.

(depuis C11)

Table des matières

Paramètres

ptr - pointeur vers la mémoire à désallouer

Valeur de retour

(aucun)

Notes

La fonction accepte (et ne fait rien avec) le pointeur nul pour réduire le nombre de cas particuliers. Que l'allocation réussisse ou non, le pointeur retourné par une fonction d'allocation peut être passé à free() .

Exemple

#include <stdlib.h>
int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    free(p1); // tout pointeur alloué doit être libéré
    int *p2 = calloc(10, sizeof *p2);
    int *p3 = realloc(p2, 1000*sizeof *p3);
    if(p3) // p3 non nul signifie que p2 a été libéré par realloc
       free(p3);
    else // p3 nul signifie que p2 n'a pas été libéré
       free(p2);
}

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.24.3.3 La fonction free (p: 365)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.22.3.3 La fonction free (p: 254)
  • Norme C11 (ISO/IEC 9899:2011):
  • 7.22.3.3 La fonction free (p: 348)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.20.3.2 La fonction free (p: 313)
  • Norme C89/C90 (ISO/CEI 9899:1990) :
  • 4.10.3.2 La fonction free

Voir aussi

alloue de la mémoire
(fonction)
désalloue la mémoire dimensionnée précédemment allouée
(fonction)
désalloue la mémoire dimensionnée et alignée précédemment allouée
(fonction)