Utilizzo della compilazione di debug per il controllo della sovrascrittura di memoria

Per usare la compilazione di debug per verificare la sovrascrittura della memoria, è prima necessario ricompilare il progetto per il debug. Passare quindi all'inizio della funzione dell'applicazione InitInstance e aggiungere la riga seguente:

afxMemDF |= checkAlwaysMemDF;

L'allocatore di memoria di debug inserisce byte di protezione in tutte le allocazioni di memoria. Tuttavia, questi byte di protezione non funzionano bene, a meno che non si verifichi se sono stati modificati (che indicherà una sovrascrittura della memoria). In caso contrario, questo fornisce solo un buffer che, in effetti, consente di eliminare una sovrascrittura della memoria.

Attivando checkAlwaysMemDF, si forza MFC a effettuare una chiamata alla AfxCheckMemory funzione ogni volta che viene effettuata una chiamata a new o delete . Se è stata rilevata una sovrascrittura della memoria, verrà generato un messaggio TRACE simile al seguente:

Damage Occurred! Block=0x5533

Se viene visualizzato uno di questi messaggi, è necessario esaminare il codice per determinare dove si è verificato il danno. Per isolare più precisamente dove si è verificata la sovrascrittura della memoria, è possibile effettuare chiamate esplicite a AfxCheckMemory se stessi. Ad esempio:

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

Se il primo ASSERT ha esito positivo e il secondo ha esito negativo, significa che la sovrascrittura della memoria deve essere stata eseguita nella funzione tra le due chiamate.

A seconda della natura dell'applicazione, è possibile che afxMemDF il programma venga eseguito troppo lentamente per persino il test. La afxMemDF variabile fa sì AfxCheckMemory che venga chiamato per ogni chiamata a new ed delete. In tal caso, è necessario distribuire le proprie chiamate a AfxCheckMemory( ) come illustrato in precedenza e provare a isolare la sovrascrittura della memoria in questo modo.

Vedi anche

Correzione dei problemi della build di versione