_calloc_dbg
Aloca um número de blocos de memória no heap com espaço adicional para um cabeçalho de depurar e substituir buffers (somente versão de depurar).
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parâmetros
num
Número de blocos de memória solicitado.size
Solicitada dimensionar 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 depurar.
filename
Ponteiro para o nome do arquivo de fonte que solicitou a operação de alocação ou NULL.linenumber
Linha número no arquivo de fonte onde a operação de alocação foi solicitada ou NULL.
The filename e linenumber parâmetros só estão disponível quando _calloc_dbg tiver sido explicitamente chamado ou a _CRTDBG_MAP_ALLOC pré-processador constante foi definida.
Valor de retorno
Após a conclusão bem-sucedida, esta função retorna um ponteiro para a parte do usuário do último bloco de memória alocada, chama a função de manipulador novo 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 o calloc função.
Comentários
_calloc_dbg é uma versão de depurar das calloc função.Quando _DEBUG não estiver definido, cada telefonar para _calloc_dbg é reduzido a uma telefonar para calloc. Ambos os calloc e _calloc_dbg alocar num blocos de memória no heap base, mas _calloc_dbg oferece vários recursos de depuração:
Buffers em ambos os lados da parte do bloco para testar se há vazamentos de usuário.
Um parâmetro de tipo de bloco para controlar os tipos de alocação específica.
filename/linenumber informações para determinar a origem de solicitações de alocação.
_calloc_dbg aloca cada bloco de memória com um pouco mais espaço que o solicitado size. O espaço adicional é usado pelo Gerenciador de heap de depurar para vincular os blocos de memória de depurar e para fornecer o aplicativo com informações de cabeçalho de depurar e substituir os buffers.Quando o bloco é alocado, a parte do usuário do bloco está preenchida com o valor 0xCD e cada um dos buffers de substituir são preenchidos com 0xFD.
In Visual C++ 2005, _calloc_dbg Define errno para ENOMEM Se uma alocação de memória falha; EINVAL será 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_errlist e _sys_nerr.
Para obter informações sobre como os blocos de memória são alocados, inicializado e gerenciado na versão de depurar do heap de base, consulte A pilha de depurar e gerenciamento de memória.Para obter informações sobre as diferenças entre chamando uma função de heap padrão em vez de sua versão de depurar em uma compilação de depurar de um aplicativo, consulte Usando a versão de depurar e a versão base.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_calloc_dbg |
<crtdbg.h> |
Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.
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
Equivalente do NET Framework
Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.