calloc
Aloca uma matriz na memória com elementos inicializados como 0.
Sintaxe
void *calloc(
size_t number,
size_t size
);
Parâmetros
number
Número de elementos.
size
O comprimento, em bytes, de cada elemento.
Valor retornado
calloc
retorna um ponteiro para o espaço alocado. O espaço de armazenamento apontado pelo valor retornado é adequadamente alinhado para armazenamento de qualquer tipo de objeto. Para obter um ponteiro para um tipo que não seja void
, use uma conversão de tipo no valor retornado.
Comentários
A função calloc
aloca espaço de armazenamento para uma matriz de number
elementos, cada um com um tamanho de size
bytes. Cada elemento é inicializado como 0.
calloc
definirá errno
como ENOMEM
se uma alocação de memória falhar ou se a quantidade de memória solicitada exceder _HEAP_MAXREQ
. Para obter informações sobre esse e outros códigos de erro, confira errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Na implementação da Microsoft, se number
ou size
for zero, calloc
retorna um ponteiro para um bloco alocado de tamanho diferente de zero. Uma tentativa de ler ou gravar por meio do ponteiro retornado leva a um comportamento indefinido.
calloc
usa a função _set_new_mode
C++ para definir o novo modo de manipulador. O novo modo do manipulador indica se, em caso de falha, calloc
deverá chamar a nova rotina do manipulador, conforme definido por _set_new_handler
. Por padrão, calloc
não chama a nova rotina do manipulador em caso de falha ao alocar memória. Você pode substituir esse comportamento padrão para que, quando calloc
falhar ao alocar memória, ele chame a nova rotina do manipulador da mesma forma que o operador new
fará quando ele falhar pelo mesmo motivo. Para substituir o padrão, chame
_set_new_mode(1);
no início do programa ou vincular com NEWMODE.OBJ
(consulte Opções de link).
Quando o aplicativo estiver vinculado a uma versão de depuração das bibliotecas de runtime do C, calloc
será resolvido como _calloc_dbg
. Para obter mais informações sobre como o heap é gerenciado durante o processo de depuração, consulte O heap de depuração do CRT.
calloc
é marcado como __declspec(noalias)
e __declspec(restrict)
, o que representa a garantia de que a função não modifica variáveis globais e que o ponteiro retornado não é um alias. Para obter mais informações, consulte noalias
e restrict
.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
calloc |
<stdlib.h> e <malloc.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// 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