calloc

Przydziela tablicę w pamięci z elementami zainicjowanymi do 0.

Składnia

void *calloc(
   size_t number,
   size_t size
);

Parametry

number
Liczba elementów.

size
Długość w bajtach każdego elementu.

Wartość zwracana

calloc Zwraca wskaźnik do przydzielonego miejsca. Miejsce do magazynowania wskazywane przez wartość zwracaną jest odpowiednio wyrównane do magazynu dowolnego typu obiektu. Aby uzyskać wskaźnik do typu innego niż void, użyj rzutowania typu na wartość zwracaną.

Uwagi

Funkcja calloc przydziela miejsce do magazynowania dla tablicy number elementów, z których każda ma długość size bajtów. Każdy element jest inicjowany do 0.

calloc ustawia wartość errno , ENOMEM jeśli alokacja pamięci nie powiedzie się lub jeśli żądana ilość pamięci przekracza _HEAP_MAXREQwartość . Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

W implementacji firmy Microsoft, jeśli number lub size ma zero, calloc zwraca wskaźnik do przydzielonego bloku o rozmiarze innym niż zero. Próba odczytu lub zapisu za pośrednictwem zwróconego wskaźnika prowadzi do niezdefiniowanego zachowania.

calloc używa funkcji języka C++ _set_new_mode , aby ustawić nowy tryb obsługi. Nowy tryb obsługi wskazuje, calloc czy w przypadku niepowodzenia należy wywołać nową procedurę obsługi zgodnie z ustawieniem ._set_new_handler Domyślnie calloc nie wywołuje nowej procedury obsługi w przypadku niepowodzenia przydzielenia pamięci. To zachowanie domyślne można zastąpić, aby w przypadku calloc niepowodzenia przydzielenia pamięci wywołać nową procedurę obsługi w taki sam sposób, jak new operator, gdy ulegnie awarii z tego samego powodu. Aby zastąpić wartość domyślną, wywołaj metodę

_set_new_mode(1);

na wczesnym etapie programu lub linku NEWMODE.OBJ (zobacz Opcje linku).

Gdy aplikacja jest połączona z wersją debugowania bibliotek czasu wykonywania języka C, calloc jest rozpoznawana jako _calloc_dbg. Aby uzyskać więcej informacji o sposobie zarządzania stertą podczas procesu debugowania, zobacz Sterta debugowania CRT.

calloc jest oznaczony __declspec(noalias) i __declspec(restrict), co oznacza, że funkcja nie ma gwarancji, aby nie modyfikować zmiennych globalnych i że zwrócony wskaźnik nie jest aliasowany. Aby uzyskać więcej informacji, zobacz tematy noalias oraz restrict.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
calloc <stdlib.h> i <malloc.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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

Zobacz też

Alokacja pamięci
free
malloc
realloc