calloc
Přidělí pole v paměti s prvky inicializovanými na 0.
Syntaxe
void *calloc(
size_t number,
size_t size
);
Parametry
number
Počet prvků
size
Délka v bajtech každého prvku
Vrácená hodnota
calloc
vrátí ukazatel na přidělený prostor. Prostor úložiště, na který odkazuje návratová hodnota, je vhodně zarovnán pro uložení 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 calloc
přiděluje prostor úložiště pro pole number
prvků, každý bajt délky size
. Každý prvek je inicializován na hodnotu 0.
calloc
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
V implementaci Microsoftu, pokud number
nebo size
je nula, calloc
vrátí ukazatel na přidělený blok nenulové velikosti. Pokus o čtení nebo zápis vráceným ukazatelem vede k nedefinované chování.
calloc
používá funkci 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í calloc
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 calloc
selhání přidělení paměti. Toto výchozí chování můžete přepsat tak, aby při calloc
selhání přidělení paměti volaly novou rutinu obslužné rutiny stejným způsobem jako new
operátor, když selže z stejného důvodu. Pokud chcete přepsat výchozí nastavení, zavolejte
_set_new_mode(1);
v rané fázi programu nebo s odkazem NEWMODE.OBJ
(viz možnosti odkazu).
Pokud je aplikace propojena s ladicí verzí knihoven runtime jazyka C, calloc
přeloží na _calloc_dbg
. Další informace o správě haldy během procesu ladění naleznete v části Haldy ladění CRT.
calloc
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 |
---|---|
calloc |
<stdlib.h> a <malloc.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.
#include <stdio.h>
#include <malloc.h>
int main( void )
{
long *buffer;
buffer = (long *)calloc( 40, sizeof( long ) );
if( buffer != NULL )
printf( "Allocated 40 long integers\n" );
else
printf( "Can't allocate memory\n" );
free( buffer );
}
Allocated 40 long integers