Partilhar via


Usando a compilação de depuração para a seleção para a substituição de memória

Para usar a compilação de depuração para verificar se a substituição de memória, primeiro você deve reconstruir o seu projeto para depuração. Em seguida, vá para o início do seu aplicativo InitInstance de função e adicione a seguinte linha:

afxMemDF |= checkAlwaysMemDF;

O alocador de memória de debug coloca os bytes de protetor em torno de todas as alocações de memória. No entanto, esses bytes de proteção não faça nada, a menos que você verifique se eles foram alterados (o que poderia indicar uma substituição de memória). Caso contrário, isso simplesmente fornece um buffer que pode, na verdade, permitem que você escapar uma substituição de memória.

Ativando o checkAlwaysMemDF, você forçará o MFC para fazer uma chamada para o AfxCheckMemory funciona sempre que uma chamada para nova ou Excluir é feita. Se uma substituição de memória foi detectada, ele gerará uma mensagem de rastreamento é semelhante à seguinte:

Damage Occurred! Block=0x5533

Se você vir uma dessas mensagens, você precisa percorrer seu código para determinar onde o dano ocorreu. Para isolar o mais precisamente onde ocorreu a substituição de memória, você pode fazer chamadas explícitas para AfxCheckMemory você mesmo. Por exemplo:

ASSERT(AfxCheckMemory());
    DoABunchOfStuff();
    ASSERT(AfxCheckMemory());

Se o primeiro ASSERT tiver êxito e falha de segundo, significa que a substituição de memória deve ter ocorrido na função entre as duas chamadas.

Dependendo da natureza do seu aplicativo, você pode descobrir que afxMemDF faz com que o programa seja executado muito lentamente para Test de par. O afxMemDF variável faz AfxCheckMemory a ser chamado para cada chamada para novo e excluir. Nesse caso, você deve dispersão suas chamadas para AfxCheckMemory(), como mostrado acima e tente isolar a memória sobrescrevem dessa maneira.

Consulte também

Referência

Corrigindo problemas de compilação de versão