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.