Compartir a través de


realloc

Reasigne bloques de memoria.

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

Parámetros

  • memblock
    Puntero al bloque de memoria previamente asignado.

  • size
    Nuevo tamaño en bytes.

Valor devuelto

realloc devuelve un puntero de void (y posiblemente desplazado) al bloque de memoria reasignado.

Si no hay suficiente memoria disponible para expandir el bloque al tamaño especificado, el bloque original permanece sin cambios, y se devuelve NULL .

Si size es cero, el bloque indicada por memblock se libera; el valor devuelto es NULL, y memblock se permite informar sobre un bloque liberado.

Los puntos del valor devuelto a un espacio de almacenamiento que se garantiza alinearse convenientemente para el almacenamiento de cualquier tipo de objeto. Para obtener un puntero a un tipo distinto de void, utilice una conversión de tipo del valor devuelto.

Comentarios

Los cambios de función de realloc el tamaño de un bloque de memoria asignado. Los puntos del argumento de memblock al principio del bloque de memoria. Si memblock es NULL, realloc se comporta de la misma manera que malloc y asigna un nuevo bloque de bytes de size . Si memblock no es NULL, debe ser un puntero devuelto por una llamada anterior a calloc, a malloc, o a realloc.

El argumento de size da el nuevo tamaño de bloque, en bytes. El contenido del bloque son sin cambios hasta el menor de los nuevo y antiguo tamaños, aunque el nuevo bloque puede estar en una ubicación diferente. Dado que el nuevo bloque puede estar en una nueva ubicación de memoria, no garantiza que el puntero devuelto por realloc para ser el puntero pasado a través del argumento de memblock . realloc no pone a cero memoria recién asignada en el caso de crecimiento del búfer.

realloc establece 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 estos y otros códigos de error, vea errno, _doserrno, _sys_errlist y _sys_nerr.

llamadasmallocdereallocpara usar la función de C++ _set_new_mode para establecer el nuevo modo de controlador. El nuevo modo de controlador indica si, en caso de error, malloc debe llamar a la nueva rutina de controlador como se establece por _set_new_handler. De forma predeterminada, malloc no llama a la nueva rutina del controlador si no se puede asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando realloc no puede asignar memoria, malloc llama a la nueva rutina de controlador de la misma manera que hace el operador new cuando produce errores por la misma razón. Para reemplazar el valor predeterminado, llame

_set_new_mode(1)

temprano en unos programa, o vínculo con NEWMODE.OBJ (vea Opciones de vínculo).

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

realloc es __declspec(noalias) marcado y __declspec(restrict), lo que significa que la función está garantizada para no modificar variables globales, y que el puntero devuelto no es con alias. Para obtener más información, vea noalias y limitado.

Requisitos

Rutina

Encabezado necesario

realloc

<stdlib.h> y <malloc.h>

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

Ejemplo

// 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 );
}
  

Equivalente en .NET Framework

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.

Vea también

Referencia

Asignación de memoria

calloc

free

malloc