Freigeben über


_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.

Siehe auch

Referenz

Speicherbelegung

_recalloc_dbg

_aligned_recalloc

_aligned_offset_recalloc

Frei

Konzepte

Linkoptionen