free ()- Liberar bloques de almacenamiento

Formato

#include <stdlib.h>
void free(void *ptr);

Nivel de idioma

ANSI

De hebra segura

Descripción

La función free() libera un bloque de almacenamiento. El argumento ptr apunta a un bloque que anteriormente estaba reservado con una llamada a las funciones calloc(), malloc(), realloc(), _C_TS_calloc(), _C_TS_malloc(), _C_TS_realloc()o _C_TS_malloc64() . El número de bytes liberados es el número de bytes especificado al reservar (o reasignar, en el caso de la función realloc() ) el bloque de almacenamiento. Si ptr es NULL, free() simplemente devuelve.
Nota:
  1. Todo el almacenamiento dinámico está asociado con el grupo de activación de la función de llamada. Como tal, el almacenamiento debe asignarse, desasignarse y reasignarse dentro del mismo grupo de activación. No es válido asignar almacenamiento dinámico dentro de un grupo de activación y desasignar o reasignar ese almacenamiento de un grupo de activación diferente. Para obtener más información sobre los grupos de activación, consulte el manual Conceptos ILE .
  2. El intento de liberar un bloque de almacenamiento no asignado con calloc(), malloc()o realloc() (o almacenamiento liberado anteriormente) puede afectar a la reserva posterior de almacenamiento y llevar a resultados no definidos. El almacenamiento asignado con la API enlazable ILE CEEGTST se puede liberar con free().

Para utilizar almacenamiento de teraespacio en lugar de almacenamiento de almacenamiento de nivel único sin cambiar el código fuente C, especifique el parámetro TERASPACE (*YES *TSIFC) en el mandato del compilador. Esto correlaciona la función de biblioteca free() con _C_TS_free(), su equivalente de almacenamiento de teraespacio.

Nota: Si se genera un mensaje C2M1211 o C2M1212 a partir de la función free() , consulte Diagnóstico de problemas de mensajes C2M1211/C2M1212 para obtener más información.

Valor de retorno

No hay ningún valor de retorno.

Ejemplo

Este ejemplo utiliza la función calloc() para asignar almacenamiento para elementos de matriz x y, a continuación, llama a la función free() para liberarlos.
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
  long * array;    /* start of the array             */
  long * index;    /* index variable                 */
  int    i;        /* index variable                 */
  int  num;        /* number of entries of the array */
 
  printf( "Enter the size of the array\n" );
  scanf( "%i", &num );
 
  /* allocate num entries */
  if ( (index = array = calloc( num, sizeof( long ))) != NULL )
  {
    for ( i = 0; i < num; ++i )           /* put values in array    */
       *index++ = i;                      /* using pointer notation */
 
    free( array );                        /* deallocates array      */
  }
  else
  { /* Out of storage */
    perror( "Error: out of storage" );
    abort();
  }
}

Información relacionada