Compartilhar via


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

Confira também

Alocação de memória
free
malloc
realloc