Compartilhar via


Usando a compilação de depuração para a seleção para substituir 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 bytes protetor em torno de todas as alocações de memória.No entanto, esses bytes de proteção não fizer 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 ser, 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 irá gerar uma mensagem de rastreamento que é semelhante à seguinte:

Damage Occurred! Block=0x5533

Se você vir uma dessas mensagens, você precisa passar pelo 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 por conta própria.Por exemplo:

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

Se a primeira declaração for bem-sucedida e a segunda falha, 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 notar que afxMemDF faz com que o programa seja executado muito lentamente até mesmo testar.O afxMemDF variável faz o AfxCheckMemory para ser chamado para cada chamada para novas e excluir.Nesse caso, você deve dispersão suas próprias chamadas para AfxCheckMemory() como mostrado acima e tente isolar a memória sobrescrever dessa maneira.

Consulte também

Referência

Corrigindo problemas de compilação de versão