2009-11-30 164 views
20

我遇到了相當複雜的代碼問題。我無法制作出能夠再現錯誤的短片段,因此我會盡力用文字解釋這個問題。什麼會導致「雙鏈表損壞」錯誤?

的代碼與錯誤

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 *** 

隨機崩潰調試表明,它來自在代碼釋放的對象的行。對象似乎沒有錯。它存在,我可以在錯誤發生時訪問它的數據。對象的析構函數是微不足道的,並且什麼也不做。

所以,我有點卡住了。你認爲在什麼樣的情況下'自由'失敗?

+8

聽起來像你最有可能在其他地方破壞你的記憶,這只是一個副作用。 – 2009-11-30 13:59:41

回答

11

嘗試在Valgrind下運行您的程序。它可能會指出你以前的原因,而gdb只是在已經發生損壞的地方破門而入。

+1

謝謝。我會嘗試。可能是我自己想出來的......這真的很慢,因爲我不能輕易再現錯誤,可能需要一段時間。 – hanno 2009-11-30 17:15:19

+1

你是怎麼解決的?你有什麼想法,爲什麼會發生這種情況,因爲我有同樣的問題? – 2013-07-27 15:13:21

+2

@AmitBhaira:我沒有解決它,我不認爲這裏的評論會引起韓流的注意。我希望漢諾剛剛嘗試了我的建議,而瓦格林德向他展示了正在破壞他的名單的問題。你嘗試過Valgrind嗎?這類問題沒有一個簡單的解決方案。記憶腐敗問題是非常難以追查的,因爲它們可能有很多不同的原因,而腐敗的顯着效果可能與原始損害的實際原因相差甚遠。 – 2013-07-27 23:59:15

相關問題