共用方式為


使用偵錯版檢查記憶體覆寫

若要使用偵錯組建來檢查記憶體覆寫,您必須先重建專案以進行偵錯。 然後,移至應用程式函 InitInstance 式的開頭,並新增下列這一行:

afxMemDF |= checkAlwaysMemDF;

偵錯記憶體配置器會將防護位元組放在所有記憶體配置周圍。 不過,除非您檢查它們是否已變更,否則這些防護位元組不會有任何好處(這表示記憶體覆寫)。 否則,這只會提供一個緩衝區,事實上,可讓您擺脫記憶體覆寫。

開啟 checkAlwaysMemDF ,您將會強制 MFC AfxCheckMemory 在每次呼叫 newdelete 時呼叫函式。 如果偵測到記憶體覆寫,它會產生類似下列的 TRACE 訊息:

Damage Occurred! Block=0x5533

如果您看到其中一則訊息,您必須逐步執行程式碼,以判斷損毀發生的位置。 若要更精確地隔離發生記憶體覆寫的位置,您可以自行進行明確的呼叫 AfxCheckMemory 。 例如:

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

如果第一個 ASSERT 成功,而第二個 ASSERT 失敗,表示兩個呼叫之間的函式中必須發生記憶體覆寫。

視應用程式的性質而定,您可能會發現導致 afxMemDF 程式執行速度太慢,甚至無法進行測試。 變數 afxMemDF 會針對每次呼叫 new 和 delete 呼叫時 AfxCheckMemory 呼叫。 在此情況下,您應該散佈對 () 的呼叫 AfxCheckMemory ,如上所示,並嘗試以這種方式隔離記憶體覆寫。

另請參閱

解決發行組建的問題