Sdílet prostřednictvím


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_doserrnoerrno

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

Viz také

Přidělení paměti
free
malloc
realloc