free
| Definido en el archivo de encabezado <stdlib.h>
|
||
void free( void* ptr ); |
||
Desasigna el espacio asignado previamente por malloc(), calloc(), aligned_alloc, (desde C11) o 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 antes por {lc|malloc()}}, calloc(), realloc(), o aligned_alloc() (desde C11).
El comportamiento es indefinido si el área de memoria a la que se refiere ptr ya ha sido desasignada, es decir, free() o realloc() ya ha sido llamada con ptr como argumento y ninguna llamada a malloc(), calloc() or realloc() resultó en un puntero igual a ptr después.
El comportamiento es indefinido si después de que free() retorna, se hace 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)
|
|
(desde C11) |
Parametros
| ptr | - | puntero a la memoria para desasignar |
Valor de retorno
(ninguno)
Observaciones
La función acepta (y no hace nada con) el puntero nulo para reducir la cantidad de casos especiales. Tanto si la asignación tiene éxito como si no, el puntero devuelto por una función de asignación puede pasarse a free().
Ejemplo
#include <stdlib.h>
int main(void)
{
int *p1 = malloc(10*sizeof *p1);
free(p1); // cada puntero asignado debe ser liberado
int *p2 = calloc(10, sizeof *p2);
int *p3 = realloc(p2, 1000*sizeof *p3);
if(p3) // p3 no nulo significa que p2 fue liberado por realloc
free(p3);
else // p3 nulo significa que p2 no fue liberado
free(p2);
}
Referencias
- Standard C11 (ISO/IEC 9899:2011):
- 7.22.3.3 The free function (p: 348)
- Standard C99 (ISO/IEC 9899:1999):
- 7.20.3.2 The free function (p: 313)
- Standard C89/C90 (ISO/IEC 9899:1990):
- 4.10.3.2 The free function
Véase también
Documentación de C++ para free
|