Freigeben über


_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 memblockNULL 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 NULLsollte 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_errlistund _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