Espacios de nombres
Variantes
Acciones

free

De cppreference.com
< c‎ | memory
Definido en la cabecera <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)

free es seguro para los hilos: se comporta como si sólo accediera a las posiciones de memoria visibles a través de su argumento, y no a cualquier almacenamiento estático.


Una llamada a free que desasigna una región de memoria se sincroniza con una llamada a cualquier función de asignación posterior que asigne la misma o parte de la misma región de memoria. Esta sincronización se produce después de cualquier acceso a la memoria por parte de la función de desasignación y antes de cualquier acceso a la memoria por parte de la función de asignación. Hay un solo orden total de todas las funciones de asignación y desasignación que operan en cada región particular de la memoria.

(desde C11)

Contenido

[editar] Parametros

ptr - puntero a la memoria para desasignar

[editar] Valor de retorno

(ninguno)

[editar] 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().

[editar] 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);
}


[editar] 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

[editar] Véase también