Sdílet prostřednictvím


Kontrola přepisování paměti použitím ladění sestavení

Vyhledávat přepsání paměti pomocí sestavení ladění, je nutné nejprve znovu vytvořit projektu pro ladění.Přejděte na samém začátku aplikace InitInstance funkce a přidejte následující řádek:

afxMemDF |= checkAlwaysMemDF;

Přidělování paměti ladění umístí bajtů guard kolem všech přidělení paměti.Nicméně tyto bajty guard nereagují všechny dobré, není-li zkontrolovat, zda nebyly změněny (což může naznačovat přepsání paměti).Jinak to poskytuje vyrovnávací paměti, která může být ve skutečnosti možné procházelo přepsání paměti.

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

Damage Occurred! Block=0x5533

Pokud se zobrazí některá z těchto zpráv, je nutné krokovat kód, chcete-li zjistit, kde došlo k poškození.K izolaci, přesněji, kde došlo přepsání paměti, můžete provést explicitní volání AfxCheckMemory sami.Příklad:

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

Pokud úspěšný první vyhodnocení a druhý nezdaří, znamená to, že musí přepsat paměti došlo mezi dvěma voláními funkce.

V závislosti na charakteru aplikace se může stát, že afxMemDF způsobí, že aplikace běží příliš pomalu i testování.afxMemDF Proměnná způsobí, že AfxCheckMemory volat pro každé volání nové a odstranit.V takovém případě by bodový vlastní volání AfxCheckMemory(), jak je uvedeno výše a pokuste se izolovat paměti přepsat tímto způsobem.

Viz také

Referenční dokumentace

Oprava problémů se sestavením pro vydání