realloc ()- Cambiar tamaño de bloque de almacenamiento reservado
Formato
#include <stdlib.h>
void *realloc(void *ptr, size_t size);Nivel de idioma
ANSI
De hebra segura
Sí
Descripción
La función realloc() cambia el tamaño de un bloque de almacenamiento reservado anteriormente. El argumento ptr apunta al principio del bloque. El argumento tamaño proporciona el nuevo tamaño del bloque, en bytes. El contenido del bloque no se modifica hasta el más corto de los tamaños nuevos y antiguos.
Si ptr es NULL, realloc() reserva un bloque de almacenamiento de tamaño bytes. No da necesariamente a todos los bits de cada elemento un valor inicial de 0.
Si tamaño es 0 y ptr no es NULL, realloc() libera el almacenamiento asignado a ptr y devuelve NULL
- 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 puede asignar almacenamiento dinámico dentro de un grupo de activación y desasignar o reasignar dicho 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 .
- Si el gestor de memoria de agrupación rápida se ha habilitado en el grupo de activación actual, el almacenamiento se recupera utilizando el gestor de memoria de agrupación rápida. Consulte_C_Quickpool_Init ()-Inicializar gestor de memoria de agrupación rápida para obtener más información.
Valor de retorno
La función realloc() devuelve un puntero al bloque de almacenamiento reasignado. La función realloc() puede mover la ubicación de almacenamiento del bloque. Por lo tanto, el argumento ptr en la función realloc() no es necesariamente el mismo que el valor de retorno.
Si tamaño es 0, la función realloc() devuelve NULL. Si no hay suficiente almacenamiento para expandir el bloque al tamaño especificado, el bloque original no se modifica y la función realloc() devuelve NULL.
El almacenamiento al que el valor de retorno apunta está alineado para el almacenamiento de cualquier tipo de objeto.
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 realloc() con _C_TS_realloc(), su equivalente de almacenamiento de teraespacio. La cantidad máxima de almacenamiento de teraespacio que puede asignar cada llamada a _C_TS_realloc() es de 2GB -240, o 214743408 bytes. Para obtener información adicional sobre el almacenamiento de teraespacio, consulte el manual ILE Concepts .
Ejemplo
realloc() para reasignar el bloque para que contenga el nuevo tamaño de la matriz. El contenido de la matriz se imprime después de cada asignación.#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long * array; /* start of the array */
long * ptr; /* pointer to array */
int i; /* index variable */
int num1, num2; /* number of entries of the array */
void print_array( long *ptr_array, int size);
printf( "Enter the size of the array\n" );
scanf( "%i", &num1);
/* allocate num1 entries using malloc() */
if ( (array = (long *) malloc( num1 * sizeof( long ))) != NULL )
{
for ( ptr = array, i = 0; i < num1 ; ++i ) /* assign values */
*ptr++ = i;
print_array( array, num1 );
printf("\n");
}
else { /* malloc error */
perror( "Out of storage" );
abort();
}
/* Change the size of the array ... */
printf( "Enter the size of the new array\n" );
scanf( "%i", &num2);
if ( (array = (long *) realloc( array, num2* sizeof( long ))) != NULL )
{
for ( ptr = array + num1, i = num1; i <= num2; ++i )
*ptr++ = i + 2000; /* assign values to new elements */
print_array( array, num2 );
}
else { /* realloc error */
perror( "Out of storage" );
abort();
}
}
void print_array( long * ptr_array, int size )
{
int i;
long * index = ptr_array;
printf("The array of size %d is:\n", size);
for ( i = 0; i < size; ++i ) /* print the array out */
printf( " array[ %i ] = %li\n", i, ptr_array[i] );
}
/**** If the initial value entered is 2 and the second value entered
is 4, then the expected output is:
Enter the size of the array
The array of size 2 is:
array[ 0 ] = 0
array[ 1 ] = 1
Enter the size of the new array
The array of size 4 is:
array[ 0 ] = 0
array[ 1 ] = 1
array[ 2 ] = 2002
array[ 3 ] = 2003 */
Información relacionada
- calloc ()-Reservar e inicializar almacenamiento
- _C_Quickpool_Debug ()-Modificar características del gestor de memoria de agrupación rápida
- _C_Quickpool_Init ()-Inicializar gestor de memoria de agrupación rápida
- _C_Quickpool_Report ()-Generar informe de gestor de memoria de agrupación rápida
- Memoria de almacenamiento dinámico
- free ()-Liberar bloques de almacenamiento
- malloc ()-Reservar bloque de almacenamiento
- <stdlib.h>