_calloc_dbg

Aloca vários blocos de memória no heap com espaço adicional para um cabeçalho de depuração e buffers de substituição (apenas versão de depuração).

Sintaxe

void *_calloc_dbg(
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber
);

Parâmetros

number
Número necessário de blocos de memória.

size
Tamanho necessário de cada bloco de memória (bytes).

blockType
Tipo de bloco de memória solicitado: _CLIENT_BLOCK ou _NORMAL_BLOCK.

Para obter informações sobre os tipos de bloco de alocação e como eles são usados, consulte Tipos de blocos no heap de depuração.

filename
Ponteiro para o nome do arquivo de origem que solicitou a operação de alocação ou nulo.

LineNumber
Número de linha no arquivo de origem em que a operação de alocação foi solicitada ou nula.

Os parâmetros filename e LineNumber só estão disponíveis quando _calloc_dbg foi chamado explicitamente ou a constante de pré-processador de _CRTDBG_MAP_ALLOC foi definida.

Valor Retornado

Após a conclusão bem-sucedida, essa função retorna um ponteiro para a parte de usuário do último bloco de memória alocado, chama a nova função de manipulador ou retorna NULL. Para obter uma descrição completa do comportamento de retorno, consulte a seção Comentários. Para obter mais informações sobre como a nova função do manipulador é usada, consulte a função calloc.

Comentários

_calloc_dbg é uma versão de depuração da função calloc . Quando _DEBUG não é definido, cada chamada para _calloc_dbg é reduzida a uma chamada para calloc. Calloc e _calloc_dbg alocar blocos de memória de número no heap base, mas _calloc_dbg oferece vários recursos de depuração:

  • Buffers em ambos os lados da parte do usuário do bloco a testar quanto a vazamentos.

  • Um parâmetro de tipo de bloco para controlar os tipos de alocação específicos.

  • nome do arquivo/ informações de LineNumber para determinar a origem das solicitações de alocação.

_calloc_dbg aloca cada bloco de memória com um pouco mais de espaço do que o tamanhosolicitado. O espaço adicional é usado pelo gerenciador de heaps de depuração para vincular os blocos de memória de depuração e fornecer informações do cabeçalho de depuração ao aplicativo e substituir buffers. Quando um bloco é alocado, a parte do usuário do bloco é preenchida com o valor 0xCD e cada um dos buffers de substituição é preenchido com 0xFD.

_calloc_dbg define errno como ENOMEM se uma alocação de memória falhar; EINVAL será retornado se a quantidade de memória necessária (incluindo a sobrecarga mencionada anteriormente) exceder _HEAP_MAXREQ. Para obter informações sobre esse e outros códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

Para obter informações sobre como os blocos de memória são alocados, inicializados e gerenciados na versão de depuração do heap de base, consulte Detalhes do heap de depuração CRT. Para obter informações sobre as diferenças entre chamar uma função de heap padrão e sua versão de depuração em um build de depuração de um aplicativo, consulte Versões de depuração das funções de alocação de heap.

Requisitos

Rotina Cabeçalho necessário
_calloc_dbg <CRTDBG. h>

Para obter mais informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// crt_callocd.c
// This program uses _calloc_dbg to allocate space for
// 40 long integers. It initializes each element to zero.

#include <stdio.h>
#include <malloc.h>
#include <crtdbg.h>

int main( void )
{
    long *bufferN, *bufferC;

    // Call _calloc_dbg to include the filename and line number
    // of our allocation request in the header and also so we can
    // allocate CLIENT type blocks specifically
    bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
    bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );
    if( bufferN != NULL && bufferC != NULL )
        printf( "Allocated memory successfully\n" );
    else
        printf( "Problem allocating memory\n" );

    / _free_dbg must be called to free CLIENT type blocks
    free( bufferN );
    _free_dbg( bufferC, _CLIENT_BLOCK );
}
Allocated memory successfully

Confira também

Rotinas de depuração
calloc
_malloc_dbg
_DEBUG