Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aloca blocos de memória na pilha com espaço extra para um cabeçalho de depuração e buffers de substituição (somente 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 solicitado de blocos de memória.
size
Tamanho solicitado de cada bloco de memória (bytes).
blockType
Tipo solicitado de bloco de memória: _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 NULL.
linenumber
Número da linha no ficheiro de origem onde a operação de atribuição foi solicitada ou NULL.
Os parâmetros filename e linenumber só estão disponíveis quando _calloc_dbg foi chamado explicitamente ou a constante de pré-processador _CRTDBG_MAP_ALLOC foi definida.
Valor de retorno
Após a conclusão bem-sucedida, essa função retorna um ponteiro para a parte do usuário do último bloco de memória alocado, chama a nova função do 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 de 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 está definido, cada chamada para _calloc_dbg é reduzida a uma chamada para calloc. Tanto calloc quanto _calloc_dbg alocar number blocos de memória no heap de base, mas _calloc_dbg oferece vários recursos de depuração:
Buffers em ambos os lados da parte do usuário do bloco para testar vazamentos.
Um parâmetro de tipo de bloco para rastrear tipos de alocação específicos.
filename/linenumberinformações para determinar a origem dos pedidos de atribuição.
_calloc_dbg aloca cada bloco de memória com um pouco mais de espaço do que o sizesolicitado. O espaço extra é usado pelo gerenciador de heap de depuração para vincular os blocos de memória de depuração e fornecer ao aplicativo informações de cabeçalho de depuração e buffers de substituição. Quando o 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 para ENOMEM se uma alocação de memória falhar; EINVAL é retornado se a quantidade de memória necessária (incluindo a sobrecarga mencionada anteriormente) exceder _HEAP_MAXREQ. Para obter informações sobre este e outros códigos de erro, consulte errno, _doserrno, _sys_errliste _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 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 a versão de depuração, consulte Debug versions of heap allocation functions.
Requerimentos
| Rotina | Cabeçalho obrigatório |
|---|---|
_calloc_dbg |
<crtdbg.h> |
Para obter mais informações sobre compatibilidade, consulte de 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