Namespaces
Variants

free

From cppreference.net
Definido en el encabezado <stdlib.h>
void free ( void * ptr ) ;

Libera el espacio previamente asignado por malloc() , calloc() , aligned_alloc() , (since 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 anteriormente por malloc() , calloc() , realloc() , o aligned_alloc() (desde C11) .

El comportamiento es indefinido si el área de memoria referida por ptr ya ha sido desasignada, es decir, free() , free_sized() , free_aligned_sized() (desde C23) , o realloc() ya ha sido llamada con ptr como argumento y ninguna llamada a malloc() , calloc() , realloc() , o aligned_alloc() (desde C11) resultó en un puntero igual a ptr posteriormente.

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

free es seguro para hilos: se comporta como si solo accediera a las ubicaciones de memoria visibles a través de su argumento, y no a ningún almacenamiento estático.

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

(desde C11)

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 free() .

Ejemplo

#include <stdlib.h>
int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    free(p1); // cada puntero asignado debe liberarse
    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

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.24.3.3 La función free (p: 365)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.22.3.3 La función free (p: 254)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.22.3.3 La función free (p: 348)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.20.3.2 La función free (p: 313)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.10.3.2 La función free

Véase también

asigna memoria
(función)
desasigna memoria previamente asignada con tamaño
(función)
desasigna memoria previamente asignada con tamaño y alineación
(función)