realloc

 

Publicado: julio de 2016

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Reasignar bloques de memoria.

void *realloc(  
   void *memblock,  
   size_t size   
);  

Parámetros

memblock
Puntero al bloque de memoria asignado previamente.

size
Nuevo tamaño en bytes.

reallocDevuelve un void puntero al bloque de memoria reasignado (y, probablemente, trasladado).

Si no hay memoria suficiente para expandir el bloque al tamaño determinado, el bloque original permanecen sin modificar, y NULL se devuelve.

Si size es cero, el bloque señalado por memblock se libera; el valor devuelto es NULL, y memblock sigue haciendo referencia a un bloque liberado.

El valor devuelto apunta a un espacio de almacenamiento confirmado como correctamente alineado para almacenar cualquier tipo de objeto. Para obtener un puntero a un tipo distinto de void, utilice un conversión de tipo en el valor devuelto.

El realloc función cambia el tamaño de un bloque de memoria asignado. El memblock argumento apunta al principio del bloque de memoria. Si memblock es NULL, realloc se comporta del mismo modo que malloc y asigna un nuevo bloque de size bytes. Si memblock no NULL, debe ser un puntero devuelto por una llamada anterior a calloc, malloc, o realloc.

El size argumento proporciona el nuevo tamaño del bloque, en bytes. El contenido del bloque es iguales hasta el más corto de los tamaños nuevos y antiguos, aunque el nuevo bloque puede estar en una ubicación diferente. Dado que el bloque nuevo puede estar en una nueva ubicación de memoria, el puntero devuelto por realloc no se garantiza que el puntero que se pasa a través de la memblock argumento. reallocno cero memoria recién asignada en el caso de crecimiento de búfer.

reallocestablece errno a ENOMEM si se produce un error en la asignación de memoria o si la cantidad de memoria solicitada supera _HEAP_MAXREQ. Para obtener información sobre este y otros códigos de error, consulte errno, _doserrno, _sys_errlist y _sys_nerr.

reallocllamadas mallocpara poder utilizar C++ _set_new_mode función para establecer el modo de controlador nuevo. El nuevo modo de controlador indica si, en caso de error, malloc es llamar a la rutina del controlador nuevo según lo establecido por _set_new_handler. De forma predeterminada, malloc no llama a la rutina del controlador nuevo en caso de error al asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando realloc no puede asignar memoria, malloc llama a la rutina de controlador nuevo en la misma forma en que el new operador hace cuando se produce un error por la misma razón. Para invalidar el valor predeterminado, llame a

_set_new_mode(1)  

primeras en las que programa o vínculo con NEWMODE. OBJ (consulte opciones de vínculo).

Cuando la aplicación se vincula con una versión de depuración de las bibliotecas de tiempo de ejecución de C realloc se resuelve como _realloc_dbg. Para obtener más información acerca de cómo se administra el montón durante el proceso de depuración, consulte el montón de depuración de CRT.

reallocse marca __declspec(noalias) y __declspec(restrict), lo que significa que se garantiza que la función no puede modificar las variables globales y que el puntero devuelto no es un alias. Para obtener más información, consulte noalias y restringir.

RutinaEncabezado necesario
realloc<stdlib.h>y<malloc.h></malloc.h></stdlib.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

// crt_realloc.c  
// This program allocates a block of memory for  
// buffer and then uses _msize to display the size of that  
// block. Next, it uses realloc to expand the amount of  
// memory used by buffer and then calls _msize again to  
// display the new amount of memory allocated to buffer.  
  
#include <stdio.h>  
#include <malloc.h>  
#include <stdlib.h>  
  
int main( void )  
{  
   long *buffer, *oldbuffer;  
   size_t size;  
  
   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )  
      exit( 1 );  
  
   size = _msize( buffer );  
   printf_s( "Size of block after malloc of 1000 longs: %u\n", size );  
  
   // Reallocate and show new size:  
   oldbuffer = buffer;     // save pointer in case realloc fails  
   if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))   
        ==  NULL )  
   {  
      free( oldbuffer );  // free original block  
      exit( 1 );  
   }  
   size = _msize( buffer );  
   printf_s( "Size of block after realloc of 1000 more longs: %u\n",   
            size );  
  
   free( buffer );  
   exit( 0 );  
}  

Size of block after malloc of 1000 longs: 4000  
Size of block after realloc of 1000 more longs: 8000  

No es aplicable. Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Asignación de memoria
calloc
liberar
malloc

Mostrar: