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)
Definido en el encabezado <cstdlib>
void free ( void * ptr ) ;

Libera el espacio previamente asignado por std::malloc , std::calloc , std::aligned_alloc (since C++17) , o std::realloc .

Si ptr es un puntero nulo, la función no hace nada.

El comportamiento es indefinido si el valor de ptr no es igual a un valor devuelto anteriormente por std::malloc , std::calloc , std::aligned_alloc (since C++17) , o std::realloc .

El comportamiento es indefinido si el área de memoria referida por ptr ya ha sido desasignada, es decir, std::free o std::realloc ya ha sido llamado con ptr como argumento y ninguna llamada a std::malloc , std::calloc , std::aligned_alloc (since C++17) , o std::realloc resultó en un puntero igual a ptr posteriormente.

El comportamiento es indefinido si después de que std::free retorna, se realiza un acceso a través del puntero ptr (a menos que otra función de asignación haya resultado en un valor de puntero igual a ptr ).

Las siguientes funciones deben ser seguras para hilos (thread-safe):

Las llamadas a estas funciones que asignan o liberan una unidad particular de almacenamiento ocurren en un único orden total, y cada llamada de liberación happens-before la siguiente asignación (si existe) en este orden.

(desde C++11)

Contenidos

Parámetros

ptr - puntero a la memoria para desasignar

Valor de retorno

(ninguno)

Notas

La función acepta (y no hace nada con) el puntero nulo para reducir la cantidad de casos especiales. Ya sea que la asignación tenga éxito o no, el puntero devuelto por una función de asignación puede pasarse a std::free .

Ejemplo

#include <cstdlib>
int main()
{
    int* p1 = (int*)std::malloc(10 * sizeof *p1);
    std::free(p1); // cada puntero asignado debe liberarse
    int* p2 = (int*)std::calloc(10, sizeof *p2);
    int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3);
    if (!p3) // p3 nulo significa que realloc falló y p2 debe liberarse.
        std::free(p2);
    std::free(p3); // p3 puede liberarse tanto si es nulo como si no.
}

Véase también