Espacios de nombres
Variantes
Acciones

std::free

De cppreference.com
< cpp‎ | memory‎ | c
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
Definido en el archivo de encabezado <cstdlib>
void free( void* ptr );

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

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

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

El comportamiento no está definido si el área de memoria a la que se refiere ptr ya ha sido desasignada, es decir, std::free o std::realloc ya ha sido llamada con ptr como argumento y no hay llamadas a std::malloc, std::calloc, std::aligned_alloc (desde C++17), o std::realloc que resultaron en un puntero igual a ptr después.

El comportamiento no está definido si después de que std::free regresa, se realiza un acceso a través del puntero ptr (a menos que otra función de asignación resulte en un valor de puntero igual a ptr).

Se requiere que las siguientes funciones sean seguras frente a hilos:

Las llamadas a estas funciones que asignan o desasignan una unidad de almacenamiento particular ocurren en un orden total único, y cada llamada de desasignación sucede-antes que la siguiente asignación (si es que la hay) en este orden.

(desde C++11)

Contenido

[editar] Parámetros

ptr - Puntero a la memoria a desasignar.

[editar] Valor de retorno

(Ninguno)

[editar] 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 se puede pasar a std::free.

[editar] 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 no tuvo éxito y p2 debe liberarse.
       std::free(p2);
    std::free(p3); // p3 puede liberarse independientemente de si es nulo o no.
}


[editar] Véase también