Sdílet prostřednictvím


Sestavení ladicí Kontrola použití pro přepsání paměti

Chcete-li zkontrolovat paměť přepsat sestavení ladění, musí nejprve znovu vytvořte projekt pro ladění.Přejděte na začátek aplikace velmi InitInstance funkci a přidejte následující řádek:

afxMemDF |= checkAlwaysMemDF;

Přidělování paměti debug umístí guard bajtů kolem všech přidělení paměti.Však tyto bajty guard nechcete provést žádné dobré Pokud kontrola, zda nebyly změněny (což může naznačovat přepsání paměti).Jinak právě nabízí vyrovnávací paměti, která může ve skutečnosti umožňují procházelo přepsání paměti.

Zapnutím checkAlwaysMemDF, vynutíte MFC, aby volání AfxCheckMemory fungovat při každém volání nové nebo Odstranit je.Pokud byl zjištěn přepsání paměti, vygeneruje TRASOVACÍ zprávy, který vypadá podobně jako následující:

Damage Occurred! Block=0x5533

Pokud některá z těchto zpráv, potřebujete krokovat kód určit, kde došlo ke škodám.Chcete-li izolovat, přesněji, kde došlo přepsání paměti, můžete provést explicitní volání na AfxCheckMemory sami.Příklad:

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

Pokud úspěšný ASSERT první a druhý nezdaří, znamená přepsání paměti musí došlo mezi dvěma volání funkce.

V závislosti na povaze aplikace pravděpodobně zjistíte, že afxMemDF způsobí, že program pracuje příliš pomalu i testování.afxMemDF Proměnná způsobí AfxCheckMemory nelze volat pro každé volání nové a odstranit.V takovém případě by bodový vlastní volání na AfxCheckMemory(), jak je uvedeno výše a zkuste izolovat paměť přepsat tak.

Viz také

Referenční dokumentace

Řešení problémů verze sestavení