0

我正在追逐內存堆損壞錯誤。我所擁有的是據稱在釋放後被修改的內存地址。 Windows主要做了觸發退出一個斷點,我在輸出窗口中看到錯誤消息如下:Visual Studio(VC++ 2005)調試內存

HEAP[myprogram.exe]: HEAP: Free Heap block df56c20 modified at df56c80 after it was freed 

我的問題是在準確點當Windows觸發斷點,我可以追溯到在我的代碼點對應與這個地址相關的數據?這至少有助於調試。感謝關於如何做到這一點的任何想法。我讀http://msdn.microsoft.com/en-us/library/s3aw423e.aspx,但是我怎麼能夠做我想做的事情並不十分清楚。謝謝!

回答

1

您可以在內存地址設置斷點。只需進入斷點窗口並添加一個新的數據斷點即可。如果您發現每次運行的相同地址發生腐敗,這可以提供幫助。

但是有這樣的問題,問題很可能在其他地方。常見原因來自未定義的行爲。尋找:

  • 雙刪除
  • 沒有從功能
  • 陣列中的
  • 寫入內存會出界回你沒有自己
+0

感謝@Luchian:我只是試過,但到那時,代碼似乎是Windows庫ntdll.dll沒有調用堆棧返回到我的應用程序,問題是這個地址不是每次運行修復;所以我不知道它的先驗十六進制表示。如果我知道先驗,我甚至會在開始調試之前就開始使用它。有什麼建議麼? –

+0

@ squashed.bugaboo刪除代碼,直到您不再受到損壞。這應該縮小它的範圍。 –

+0

謝謝@Luchian:好的。我明白了,所以你基本上是在暗示(我推遲了什麼),以恢復到沒有錯誤的代碼的工作版本。我說的是對的嗎? –