Delen via


De debug-build gebruiken om te testen op geheugenoerschrijving.

Als u de build voor foutopsporing wilt gebruiken om te controleren op overschrijven van geheugen, moet u eerst uw project opnieuw opbouwen voor foutopsporing. Ga vervolgens naar het begin van de functie van uw toepassing InitInstance en voeg de volgende regel toe:

afxMemDF |= checkAlwaysMemDF;

De geheugen allocator voor foutopsporing plaatst beschermingsbytes rond alle geheugentoewijzingen. Deze beveiligingsbytes zijn echter nutteloos, tenzij u controleert of ze zijn gewijzigd (wat zou aangeven dat er een geheugenoverschrijving heeft plaatsgevonden). Anders biedt dit alleen een buffer die u in feite kan toestaan om weg te komen met een overschrijven van geheugen.

Door checkAlwaysMemDF in te schakelen, dwingt u MFC om elke keer dat een aanroep naar AfxCheckMemory of new wordt gedaan, een aanroep naar de delete-functie te maken. Als er een overschrijfgeheugen is gedetecteerd, wordt er een TRACE-bericht gegenereerd dat er ongeveer als volgt uitziet:

Damage Occurred! Block=0x5533

Als u een van deze berichten ziet, moet u uw code doorlopen om te bepalen waar de schade is opgetreden. Als u nauwkeuriger wilt isoleren waar het geheugen is overschreven, kunt u zelf expliciete aanroepen naar AfxCheckMemory maken. Voorbeeld:

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

Als de eerste ASSERT slaagt en de tweede mislukt, betekent dit dat het overschrijven van het geheugen moet hebben plaatsgevonden in de functie tussen de twee aanroepen.

Afhankelijk van de aard van uw toepassing, kan het zijn dat afxMemDF uw programma te langzaam wordt uitgevoerd om zelfs te testen. De afxMemDF-variabele zorgt ervoor dat AfxCheckMemory wordt aangeroepen bij elke aanroep van `new` en `delete`. In dat geval moet u uw eigen aanroepen naar AfxCheckMemory( ) opstellen zoals hierboven wordt beschreven en proberen de geheugenoverschrijding op die manier te isoleren.

Zie ook

Problemen met releasebuild oplossen