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

A biblioteca CRT (tempo de execução C) 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 de lançamento anexadas _dbg 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 builds 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 para _malloc_dbg em vez de depender de um wrapper em torno de malloc.

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 builds que não são de depuração

Quando _DEBUG não está definido, as chamadas para malloc não são perturbadas, as chamadas para _malloc_dbg são resolvidas para malloc, a definição de é ignorada e as informações do arquivo de origem pertencentes à 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