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_MAXREQ
wartość . Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno
, _doserrno
, _sys_errlist
i _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