_recalloc
Eine Kombination von realloc und calloc. Ordnet ein Array im Speicher neu zu und initialisiert ihre Elemente bis 0.
void *_recalloc(
void *memblock
size_t num,
size_t size
);
Parameter
memblock
Zeiger zuvor dem reservierten Speicherblock.num
Anzahl der Elemente.size
Länge in Bytes jedes Elements.
Rückgabewert
_recalloc 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 die angeforderte Größe 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 _recalloc-Funktion änder die Größe eines reservierten Speicherblocks. Das Argument memblock zeigt auf den Anfang des Speicherblocks. Wenn memblockNULL ist, ist das Übergabeverhalten _recalloc genauso wie calloc und ordnet einem neuen Block num * size Bytes zu. Jedes Element wird 0 initialisiert. Wenn memblock nicht NULL ist, sollte ein Zeiger sein, der bei einem vorherigen Aufruf von calloc, von malloc oder realloc zurückgegeben wird.
Da der neue Block in einer neuen Speicherort sein kann, wird der Zeiger, der durch _recalloc zurückgegeben wird, nicht gewährleistet, dass sich der Zeiger zu sein, der vom memblock-Argument übergeben wird.
_recalloc 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.
recalloc Ruft realloc um die Funktion der _set_new_mode verwenden, um den neuen Handlermodus festzulegen. Der neue Handlermodus gibt an, ob bei einem Fehler realloc die neue Handlerroutine aufgerufen werden soll, wie dies von _set_new_handler festgelegt ist. Standardmäßig ruft realloc bei einem Speicherbelegungsfehler nicht die neue Handlerroutine auf. Sie können dieses Standardverhalten überschreiben, sodass, wenn _recalloc Speicher belegen nicht, kann realloc die neue Handlerroutine genauso aufruft, dass der Operator new führt, die aus demselben Grund fehlschlägt. Um den Standardwert zu überschreiben, rufen Sie
_set_new_mode(1)
frühzeitig im Programm oder im Link mit NEWMODE.OBJ.
Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, ändert sich zu _recalloc_dbg_recalloc auf. Weitere Informationen dazu, wie der Heap während des Debuggingsprozesses verwaltet wird, finden Sie unter Der CRT-Debugheap.
_recalloc 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 |
---|---|
_recalloc |
<stdlib.h> und <malloc.h> |
Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.
.NET Framework-Entsprechung
Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.