Versões de depuração de funções de alocação de heap

A biblioteca de tempo de execução C (CRT) contém versões especiais de depuração das funções de alocação de heap. Essas funções têm os mesmos nomes que as versões Release com _dbg anexado a elas. Este artigo descreve as diferenças entre a versão Release de uma função CRT e a _dbg versão, usando malloc e _malloc_dbg como exemplos.

Comportamento em compilações de depuração

Quando _DEBUG é definido, o CRT mapeia todas as malloc chamadas para _malloc_dbg. Portanto, você não precisa reescrever seu código usando _malloc_dbg em vez de malloc receber os benefícios durante a depuração.

No entanto, talvez você queira chamar explicitamente _malloc_dbg. Chamar _malloc_dbg explicitamente tem alguns benefícios adicionais:

  • Acompanhar alocações de tipo _CLIENT_BLOCK.

  • Armazenar o arquivo de origem e o número da linha em que a solicitação de alocação ocorreu.

Se você não quiser converter suas malloc chamadas para _malloc_dbg, poderá obter as informações do arquivo de origem definindo _CRTDBG_MAP_ALLOC, o que faz com que o pré-processador mapeie diretamente todas as chamadas para _malloc_dbgmalloc, em vez de depender de um wrapper em torno mallocde .

Para controlar os tipos separados de alocações em blocos do cliente, você deverá chamar _malloc_dbg diretamente e definir o parâmetro blockType como _CLIENT_BLOCK.

Comportamento em compilações sem depuração

Quando _DEBUG não é definido, as chamadas para não são perturbadas, as chamadas para são resolvidas para mallocmalloc_malloc_dbg , a definição de é ignorada e as informações do arquivo de origem referentes à solicitação de _CRTDBG_MAP_ALLOC alocação não são fornecidas. Como malloc não tem um parâmetro de tipo de bloco, as solicitações de _CLIENT_BLOCK tipos são tratadas como alocações padrão.

Confira também

Técnicas de depuração CRT