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.