_recalloc
Die Kombination aus realloc
und calloc
. Ordnet ein Array im Speicher neu zu und initialisiert seine Elemente auf 0.
Syntax
void *_recalloc(
void *memblock
size_t num,
size_t size
);
Parameter
memblock
Zeiger zum vorherigen belegten Speicherblock.
number
Anzahl der Elemente.
size
Länge jedes Elements in Bytes.
Rückgabewert
_recalloc
gibt einen void
-Zeiger auf den neu belegten (und möglicherweise verschobenen) Speicherblock zurück.
Wenn nicht genügend Arbeitsspeicher verfügbar ist, um den Block auf die angegebene Größe zu erweitern, bleibt der ursprüngliche Block unverändert und NULL
wird zurückgegeben.
Wenn die angeforderte Größe 0 beträgt, wird der Block, auf den durch memblock
gezeigt wird, freigegeben; der Rückgabewert beträgt NULL
und memblock
zeigt auf den freigegebenen Block.
Der Rückgabewert verweist auf einen Speicherplatz, der für die Speicherung eines beliebigen Objekttyps entsprechend ausgerichtet ist. Um einen Zeiger auf einen anderen Typ als void
zurückzugeben, verwenden Sie eine Typumwandlung für den Rückgabewert.
Hinweise
Die _recalloc
-Funktion ändert die Größe eines zugeordneten Speicherblocks. Das memblock
-Argument zeigt auf den Anfang des Speicherblocks. Wenn memblock
NULL
ist, dann verhält sich _recalloc
genauso wie calloc
und weist einen neuen Block an number
* size
-Bytes zu. Jedes Element wird auf 0 initialisiert. Andernfalls memblock
NULL
sollte es sich um einen Zeiger handelt, der von einem vorherigen Aufruf von calloc
, oder malloc
.realloc
Da sich der neue Block an einer neuen Speicherposition befinden kann, ist der von _recalloc
dem zurückgegebenen Zeiger nicht garantiert der Zeiger, der durch das memblock
Argument übergeben wird.
_recalloc
setzt errno
auf ENOMEM
, wenn eine Speicherbelegung fehlschlägt oder wenn der benötigte Speicherplatz größer als _HEAP_MAXREQ
ist. Informationen zu diesem und anderen Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
recalloc
Aufrufe realloc
, um die C++ _set_new_mode
-Funktion zum Festlegen des neuen Handlermodus zu verwenden. Der neue Handlermodus gibt an, ob bei einem Fehler realloc
die neue Handlerroutine aufrufen soll, wie dies von _set_new_handler
festgelegt ist. Ruft standardmäßig die neue Handlerroutine nicht auf, realloc
wenn Speicher nicht zugewiesen werden kann. Sie können dieses Standardverhalten überschreiben, sodass, wenn _recalloc
Speicher nicht belegen kann,realloc
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);
rechtzeitig im Programm auf, oder stellen Sie eine Verknüpfung mit NEWMODE.OBJ her.
Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, _recalloc
wird sie aufgelöst._recalloc_dbg
Weitere Informationen dazu, wie der Heap während des Debuggingvorgangs verwaltet wird, finden Sie im CRT-Debug-Heap.
_recalloc
ist markiert __declspec(noalias)
und __declspec(restrict)
, was bedeutet, dass die Funktion garantiert nicht globale Variablen ändert, und dass der zurückgegebene Zeiger nicht aliast ist. Weitere Informationen finden Sie unter noalias
und restrict
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_recalloc |
<stdlib.h> und <malloc.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Siehe auch
Speicherzuweisung
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Linkoptionen