C ++ realloc () - Biblioteca estándar de C ++

La función realloc () en C ++ reasigna un bloque de memoria que se asignó previamente pero que aún no se liberó.

La función realloc () reasigna la memoria que se asignó previamente usando la función malloc (), calloc () o realloc () y que aún no se liberó usando la función free ().

Si el nuevo tamaño es cero, el valor devuelto depende de la implementación de la biblioteca. Puede devolver o no un puntero nulo.

prototipo realloc ()

 void * realloc (void * ptr, size_t nuevo_size);

La función se define en el archivo de encabezado.

Parámetros de realloc ()

  • ptr: un puntero al bloque de memoria que se reasignará.
  • new_size: Un valor integral sin signo que representa el nuevo tamaño del bloque de memoria en bytes.

realloc () Valor de retorno

La función realloc () devuelve:

  • Un puntero al comienzo del bloque de memoria reasignado.
  • Puntero nulo si falla la asignación.

Al reasignar memoria, si no hay suficiente memoria, el bloque de memoria anterior no se libera y se devuelve un puntero nulo.

Si el puntero antiguo (es decir, ptr) es nulo, llamar a realloc () es lo mismo que llamar a la función malloc () con el nuevo tamaño como parámetro.

Hay dos formas posibles de reasignar la memoria.

  1. Expansión o contracción del mismo bloque : el bloque de memoria señalado por el puntero antiguo (es decir, ptr) se expande o contrae, si es posible. El contenido del bloque de memoria permanece sin cambios hasta el menor de los tamaños nuevo y antiguo. Si se expande el área, el contenido del bloque recién asignado no está definido.
  2. Moverse a una nueva ubicación : se asigna un nuevo bloque de memoria de tamaño new_size bytes. También en este caso, el contenido del bloque de memoria permanece sin cambios hasta el menor de los tamaños nuevo y antiguo, y si la memoria se expande, el contenido del bloque recién asignado no está definido.

Ejemplo 1: ¿Cómo funciona la función realloc ()?

 #include #include using namespace std; int main() ( float *ptr, *new_ptr; ptr = (float*) malloc(5*sizeof(float)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i*1.5; ) /* reallocating memory */ new_ptr = (float*) realloc(ptr, 10*sizeof(float)); if(new_ptr==NULL) ( cout << "Memory Re-allocation Failed"; exit(1); ) /* Initializing re-allocated memory block */ for (int i=5; i<10; i++) ( new_ptr(i) = i*2.5; ) cout << "Printing Values" << endl; for (int i=0; i<10; i++) ( cout << new_ptr(i) << endl; ) free(new_ptr); return 0; )

Cuando ejecute el programa, la salida será:

 Valores de impresión 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Ejemplo 2: función realloc () con new_size zero

 #include #include using namespace std; int main() ( int *ptr, *new_ptr; ptr = (int*) malloc(5*sizeof(int)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i; ) /* re-allocating memory with size 0 */ new_ptr = (int*) realloc(ptr, 0); if(new_ptr==NULL) ( cout << "Null Pointer"; ) else ( cout << "Not a Null Pointer"; ) return 0; )

Cuando ejecute el programa, la salida será:

 Puntero nulo

Ejemplo 3: función realloc () cuando ptr es NULL

 #include #include #include using namespace std; int main() ( char *ptr=NULL, *new_ptr; /* reallocating memory, behaves same as malloc(20*sizeof(char)) */ new_ptr = (char*) realloc(ptr, 50*sizeof(char)); strcpy(new_ptr, "Welcome to Programiz.com"); cout << new_ptr; free(new_ptr); return 0; )

Cuando ejecute el programa, la salida será:

 Bienvenido a Programiz.com

Articulos interesantes...