realloc
Teilen Sie Speicherblöcke neu.
void *realloc(
void *memblock,
size_t size
);
Parameter
memblock
zuvor Zeiger auf den belegten Speicherblock.size
Die neue Größe in Bytes.
Rückgabewert
realloc gibt einen Zeiger auf den neu void zugeteilten (und ggf. verschoben) Speicherblock zurück.
Wenn nicht genügend verfügbaren Arbeitsspeicher vorhanden ist, um die angegebene Größe des Blocks zu erweitern, wird der ursprüngliche Block unverändert belassen, und NULL wird zurückgegeben.
Wenn size (null) ist, wird der Block, der durch memblock gezeigte freigegeben. NULLund der Rückgabewert ist memblock ist Left an einem freigegebenen - Block zeigen.
Der Rückgabewert zeigt auf ein garantiert der Speicherplatz zum Speichern eines beliebigen Typs Objekt ordnungsgemäß ausgerichtet werden soll.Um einen Zeiger auf einen anderen Typ als voidabzurufen, verwenden Sie eine Typumwandlung im Rückgabewert.
Hinweise
Die Änderungen an Funktionen realloc die Größe des belegten Speicherblocks.Das memblock-Argument verweist auf den Anfang des Speicherblocks.Wenn memblockNULList, verhält sich realloc die gleiche Weise wie malloc und ordnet einen neuen Block size Bytes.Wenn memblock nicht NULList, sollte ein Zeiger sein, der durch einen vorherigen Aufruf von calloc, mallocoder realloczurückgegeben wurde.
Das size-Argument gibt die neue Größe des Blocks in Bytes.Der Inhalt des Blocks stehen bis zu dem die Größe der alten und der neuen kürzeren unverändert, obwohl der neuen Block in einem anderen Speicherort befinden kann.Da der neuen Block in einer neuen Speicheradresse werden kann, wird der Zeiger, der durch realloc zurückgegeben wird, nicht gewährleistet, dass der Zeiger sein, der vom memblock-Argument übergeben wird.realloc belegte Speicher neu stellt keine Puffer im Ereignisprotokoll zunahme auf Null fest.
realloc legt diesen fest ENOMEM zu errno , wenn die Speicherbelegung fehlschlägt, oder wenn der angeforderte Arbeitsspeicher _HEAP_MAXREQüberschreitet.Weitere Informationen zu diesem und anderen Fehlercodes finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
reallocAufrufe mallocum die Funktion C++ _set_new_mode neuen Handler verwenden, um den Modus festzulegen.Der neue Modus gibt an, ob die Handler auf Fehler, malloc , die neue Handler routine legen Sie z. B. durch _set_new_handleraufzurufen ist.Standardmäßig ruft malloc nicht die neuen Handler routine bei Bindungsfehlern Speicher belegen.Sie können dieses Standardverhalten überschreiben, dass beim realloc Speicher belegen, kann nicht malloc die neue Handler routine genauso aufgerufen wird, dass der Operator new , wenn sie aus demselben Grund fehlschlägt.Um den Standardwert überschreiben, rufen
_set_new_mode(1)
früh in einem Programm oder eine Verknüpfung mit NEWMODE.OBJ (siehe Link-Optionen).
Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, wird realloc zu _realloc_dbgauf.Weitere Informationen darüber, wie der Heap während des Debuggens Prozesses verwaltet wird, finden Sie unter Der CRT-Debugheap.
realloc ist als __declspec(noalias) und __declspec(restrict)und bedeutet, dass die Funktion nicht garantiert globale Variablen ändern und dass der zurückgegebene Zeiger nicht mit einem Alias versehene.Weitere Informationen finden Sie unter noalias und Beschränken Sie ein.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
realloc |
<stdlib.h> und <malloc.h> |
Um Kompatibilität zusätzlichen Informationen 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. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.