Namespaces
Variants

std:: free

From cppreference.net
< cpp ‎ | memory ‎ | c
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Défini dans l'en-tête <cstdlib>
void free ( void * ptr ) ;

Libère l'espace précédemment alloué par std::malloc , std::calloc , std::aligned_alloc (depuis C++17) , ou std::realloc .

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

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

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 std::free ou std::realloc a déjà été appelé avec ptr comme argument et qu'aucun appel à std::malloc , std::calloc , std::aligned_alloc (depuis C++17) , ou std::realloc n'a abouti à un pointeur égal à ptr par la suite.

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

Les fonctions suivantes doivent être thread-safe :

Les appels à ces fonctions qui allouent ou désallouent une unité particulière de stockage se produisent dans un ordre total unique, et chaque appel de désallocation se produit-avant la prochaine allocation (le cas échéant) dans cet ordre.

(depuis C++11)

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é à std::free .

Exemple

#include <cstdlib>
int main()
{
    int* p1 = (int*)std::malloc(10 * sizeof *p1);
    std::free(p1); // tout pointeur alloué doit être libéré
    int* p2 = (int*)std::calloc(10, sizeof *p2);
    int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3);
    if (!p3) // p3 null signifie que realloc a échoué et p2 doit être libéré.
        std::free(p2);
    std::free(p3); // p3 peut être libéré qu'il soit null ou non.
}

Voir aussi