_recalloc
Kombinace a realloc
calloc
. Relokuje pole v paměti a inicializuje jeho prvky na 0.
Syntaxe
void *_recalloc(
void *memblock
size_t num,
size_t size
);
Parametry
memblock
Ukazatel na dříve přidělený blok paměti
number
Počet prvků
size
Délka v bajtech každého prvku
Vrácená hodnota
_recalloc
void
vrátí ukazatel na relokovaný (a pravděpodobně přesunutý) blok paměti.
Pokud není k dispozici dostatek paměti pro rozšíření bloku na danou velikost, původní blok zůstane beze změny a NULL
vrátí se.
Pokud je požadovaná velikost nula, blok, na který memblock
odkazuje, se uvolní; návratová hodnota je NULL
a memblock
vlevo ukazuje na uvolněný blok.
Návratová hodnota odkazuje na prostor úložiště, který je vhodně zarovnaný pro úložiště libovolného typu objektu. Pokud chcete získat ukazatel na jiný typ než void
, použijte přetypování typu na návratovou hodnotu.
Poznámky
Funkce _recalloc
změní velikost přiděleného bloku paměti. Argument memblock
odkazuje na začátek bloku paměti. Pokud memblock
ano NULL
, _recalloc
chová se stejným způsobem jako calloc
a přiděluje nový blok number
* size
bajtů. Každý prvek je inicializován na hodnotu 0. Pokud memblock
není NULL
, měl by to být ukazatel vrácený předchozím voláním calloc
, malloc
nebo realloc
.
Vzhledem k tomu, že nový blok může být v novém umístění paměti, není zaručeno, že ukazatel vrácený _recalloc
ukazatelem bude předán prostřednictvím argumentu memblock
.
_recalloc
nastaví errno
, ENOMEM
pokud přidělení paměti selže nebo pokud požadovaná velikost paměti překročí _HEAP_MAXREQ
. Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
recalloc
volání realloc
pro použití funkce C++ _set_new_mode
k nastavení nového režimu obslužné rutiny. Nový režim obslužné rutiny označuje, zda při selhání realloc
je volání nové rutiny obslužné rutiny nastavena ._set_new_handler
Ve výchozím nastavení nevolá rutinu nové obslužné rutiny při realloc
selhání přidělení paměti. Toto výchozí chování můžete přepsat tak, aby při _recalloc
selhání přidělení paměti realloc
volaly novou rutinu obslužné rutiny stejným způsobem jako new
operátor v případě selhání z stejného důvodu. Pokud chcete přepsat výchozí nastavení, zavolejte
_set_new_mode(1);
v rané fázi programu nebo propojení s NEWMODE.OBJ.
Pokud je aplikace propojena s ladicí verzí knihoven runtime jazyka C, _recalloc
přeloží na _recalloc_dbg
. Další informace o správě haldy během procesu ladění naleznete v části Haldy ladění CRT.
_recalloc
je označen a __declspec(noalias)
__declspec(restrict)
, což znamená, že funkce zaručuje, že nebude upravovat globální proměnné a že vrácený ukazatel není aliasován. Další informace najdete v tématech noalias
a restrict
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_recalloc |
<stdlib.h> a <malloc.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Viz také
Přidělení paměti
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Možnosti propojení