Dela via


_recalloc

En kombination av realloc och calloc. Omallokerar en matris i minnet och initierar dess element till 0.

Syntax

void *_recalloc(
   void *memblock,
   size_t num,
   size_t size
);

Parametrar

memblock
Pekare till tidigare allokerat minnesblock.

number
Antal element.

size
Längd i byte för varje element.

Returvärde

_recalloc returnerar en void pekare till det omallokerade (och eventuellt flyttade) minnesblocket.

Om det inte finns tillräckligt med tillgängligt minne för att expandera blocket till den angivna storleken lämnas det ursprungliga blocket oförändrat och NULL returneras.

Om den begärda storleken är noll frigörs blocket som pekas på av memblock. returvärdet är NULLoch memblock lämnas pekar på ett frigjort block.

Returvärdet pekar på ett lagringsutrymme som är lämpligt justerat för lagring av alla typer av objekt. Om du vill få en pekare till en annan typ än voidanvänder du en typgjutning på returvärdet.

Anmärkningar

Funktionen _recalloc ändrar storleken på ett allokerat minnesblock. Argumentet memblock pekar på början av minnesblocket. Om memblock är NULLfungerar _recalloc på samma sätt som calloc och allokerar ett nytt block med number * size byte. Varje element initieras till 0. Om memblock inte är NULLbör det vara en pekare som returnerades av ett tidigare anrop till calloc, malloceller realloc.

Eftersom det nya blocket kan finnas på en ny minnesplats är pekaren som returneras av _recalloc inte garanterad att vara pekaren som skickas genom argumentet memblock.

_recalloc anger errno till ENOMEM om minnesallokeringen misslyckas eller om mängden minne som begärs överskrider _HEAP_MAXREQ. Information om den här och andra felkoder finns i errno, _doserrno, _sys_errlistoch _sys_nerr.

recalloc anropar realloc för att använda funktionen C++ _set_new_mode för att ange det nya hanteringsläget. Det nya hanteringsläget anger om realloc vid fel ska anropa den nya hanteringsrutinen enligt _set_new_handler. Som standard anropar realloc inte den nya hanteringsrutinen om det inte går att allokera minne. Du kan åsidosätta det här standardbeteendet så att realloc anropar den nya hanteringsrutinen på samma sätt _recalloc som new operatorn gör när det misslyckas av samma anledning när det inte går att allokera minne. Om du vill åsidosätta standardinställningen anropar du

_set_new_mode(1);

tidigt i programmet eller länka till NEWMODE.OBJ.

När programmet är länkat till en felsökningsversion av C-körningsbiblioteken löser _recalloc att _recalloc_dbg. Mer information om hur heapen hanteras under felsökningsprocessen finns i CRT-felsöknings heapen.

_recalloc har markerats __declspec(noalias) och __declspec(restrict), vilket innebär att funktionen garanterat inte ändrar globala variabler och att pekaren som returneras inte är alias. Mer information finns i noalias och restrict.

Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det här beteendet finns i global status i CRT-.

Krav

Rutin Obligatoriskt huvud
_recalloc <stdlib.h> och <malloc.h>

Mer kompatibilitetsinformation finns i Compatibility.

Se även

minnesallokering
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Länkalternativ