realloc
Zuordnen Speicherblöcke neu zu.
void *realloc(
void *memblock,
size_t size
);
Parameter
memblock
Zeiger zuvor dem reservierten Speicherblock.size
Neue Größe in Bytes.
Rückgabewert
realloc gibt ein void Zeiger auf das neu zugeordnete (und möglicherweise bewegt) Speicherblock zurück.
Falls nicht genügend verfügbarer Speicher gibt, z des Blocks der angegebenen Größe zu erweitern, ist der erste Block unverändert gelassen, und NULL wird zurückgegeben.
Wenn size null ist, wird der Block, auf den durch memblock gezeigt wird, freigegeben; der Rückgabewert ist NULL und memblock ist Left, an einem freigegebenen Block selbst zu zeigen.
Der Rückgabewert zeigt auf einem Speicherplatz, der garantiert wird, zum Speichern eines beliebigen Typs Objekt ordnungsgemäß ausgerichtet sind. Um einen Zeiger auf einen anderen Typ als void zu erhalten, verwenden Sie eine Typumwandlung für den Rückgabewert.
Hinweise
Die realloc-Funktion änder die Größe eines reservierten Speicherblocks. Das Argument memblock zeigt auf den Anfang des Speicherblocks. Wenn memblockNULL ist, verhält sich genauso wie realloc und malloc ordnet einem neuen Block size Bytes zu. Wenn memblock nicht NULL ist, sollte ein Zeiger sein, der bei einem vorherigen Aufruf von calloc, malloc oder realloc zurückgegeben wird.
Das Argument size gibt die neue Größe des Blocks, in Bytes. Der Inhalt des Blocks entspricht z kürzeren der neuen und den alten Größen unverändert, obwohl der neue Block in einem anderen Speicherort befinden kann. Da der neue Block in einer neuen Speicherort sein kann, wird der Zeiger, der von realloc zurückgegeben wird, nicht gewährleistet, dass sich der Zeiger zu sein, der vom memblock-Argument übergeben wird. realloc stellt nicht neu belegte Arbeitsspeicher bei Auslösung im Fall von Pufferzunahme auf Null ein.
realloc wird errno auf ENOMEM fest, wenn die Speicherbelegung fehlschlägt, oder wenn der angeforderte Arbeitsspeicher _HEAP_MAXREQ überschreitet. Informationen hierzu und andere Fehlercodes, finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
realloc Ruft malloc um die Funktion der _set_new_mode verwenden, um den neuen Handlermodus festzulegen. Der neue Handlermodus gibt an, ob bei einem Fehler malloc die neue Handlerroutine aufgerufen werden soll, wie dies von _set_new_handler festgelegt ist. Standardmäßig ruft malloc bei einem Speicherbelegungsfehler nicht die neue Handlerroutine auf. Sie können dieses Standardverhalten überschreiben, sodass, wenn realloc Speicher nicht belegen kann,malloc die neue Handlerroutine genauso aufruft wie der new-Operator, wenn dieser aus demselben Grund fehlschlägt. Um den Standardwert zu überschreiben, rufen Sie
_set_new_mode(1)
früh in ein Programm oder Link mit NEWMODE.OBJ (siehe Linkoptionen).
Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, wird realloc von _realloc_dbg auf. Weitere Informationen dazu, wie der Heap während des Debuggingsprozesses verwaltet wird, finden Sie unter Der CRT-Debugheap.
realloc ist als __declspec(noalias) gekennzeichnet und __declspec(restrict) heißt, dass die Funktion, die gewährleistet sind globale Variablen nicht zu ändern und der zurückgegebene Zeiger nicht von Alias-. Weitere Informationen finden Sie unter noalias und Einschränken ein.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
realloc |
<stdlib.h> und <malloc.h> |
Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.
Beispiel
// 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 );
}
.NET Framework-Entsprechung
Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.