Exportar (0) Imprimir
Expandir todo
div
EOF
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

realloc

Reasigne bloques de memoria.

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

Puntero al bloque de memoria previamente asignado.

size

Nuevo tamaño en bytes.

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 que sea sencilla alineadas 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.

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 el error, malloc es llamar a la nueva rutina de controlador como lo establece _set_new_handler. De forma predeterminada, malloc no llama a la nueva rutina de controlador en el error asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando realloc no puede para asignar memoria, malloc llame a la nueva rutina del controlador de la misma manera que el operador de new cuando falla por la misma razón. Para reemplazar el valor predeterminado, llame a

_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.

rutina

Encabezado necesario

realloc

<stdlib.h> y <malloc.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 );
}
El tamaño de bloque después de malloc de 1000 desee: 4000
El tamaño de bloque después realloc de 1000 desea más: 8000

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

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.