2010-01-03 67 views
1

我主要爲我的工作使用C語言。我遇到過很多問題,並且花費很多時間調試與動態分配的內存損壞/覆蓋相關的問題。像malloc(A)一個字節,但使用超過A字節的寫入。爲實現這一目標我試圖讀幾件事情,當我讀到: -內存相關的錯誤

1)的一種方法,其中一個比什麼是需要分配更多的內存。並在這些額外的位置寫出一些已知的價值/模式。然後在程序執行期間,該模式應該是未觸及的,否則它表示內存損壞/覆蓋。但是這種方法是如何工作的。這是否意味着每次寫入使用malloc()分配的指針時,我應該對額外的哨兵模式進行內存讀取並閱讀它的完整性?那會讓我整個節目很慢。 而且我們可以從發佈版本的代碼中刪除這些檢查,也不是富有成效的,因爲與內存相關的問題在「真實場景」中可能會發生得更多。我們可以處理這個問題嗎?

2)我聽說有一種叫做HEAP WALKER,這使程序來檢測內存相關的問題?如何能夠實現這一點。

謝謝。

-AD。

+3

92個問題,但只接受18%?爲什麼是這樣? – 2010-01-03 10:18:00

回答

0

內存警衛可以捕獲一些堆腐敗。它比較慢(尤其是釋放),但它僅用於調試目的,並且您的發佈版本不包含此內容。

堆走的是特定的平臺,但不一定是太有用了。最簡單的檢查是簡單地包裝你的分配,並將它們記錄到文件中與LINEFILE信息爲您調試模式,幾乎所有的泄漏會很快顯示出來,當你退出程序和數字不相符向上。

谷歌搜索LINE我相信很多結果都會顯示出來。

1

如果你在Mac OS X上,有一個名爲libgmalloc一個真棒庫。 libgmalloc將每個內存分配放在一個單獨的頁面上。超出頁面的任何內存訪問/寫入都會立即觸發總線錯誤。但請注意,使用libgmalloc運行程序可能會導致顯着的放緩。