我檢查覈心轉儲,並注意到,在一幀中的「這個」指針比在下一幀(在同一個線程)不同。不只是有點不同,它從0x8167428到0x200。「this」指針變化回溯
我不是很熟練使用GDB,但這看起來並不正確。這是否有問題,如果有的話,可能是什麼原因?
我檢查覈心轉儲,並注意到,在一幀中的「這個」指針比在下一幀(在同一個線程)不同。不只是有點不同,它從0x8167428到0x200。「this」指針變化回溯
我不是很熟練使用GDB,但這看起來並不正確。這是否有問題,如果有的話,可能是什麼原因?
不便的this
指針可以在GDB跟蹤幀之間改變,如果在下一幀中的函數被調用一個不同的對象(即使對象是相同的類型),因爲這是針對特定的實例。這大概是不是你的問題。
0x200
對於this
不是有效值,並且幾乎肯定表示某種類型的內存損壞。 this
指針有時存儲在堆棧中,並作爲不可見的第一個參數傳遞給函數。所以,如果你損壞了堆棧(通過跳出寫入另一個變量的界限),你可能會看到這個指針被破壞了。
值0x200
本身很有趣。因爲它是如此接近0
,但實際上沒有0
,則表明你看實例可能是另一種對象或數組,位於從對象/數組開始0x200
字節的一部分,該對象/數組地址實際上是NULL
。看着你的代碼,你應該很容易找出哪個對象被設置爲NULL
,這導致它報告0x200
。
你能否在你的問題中添加一些代碼來重現這一點? – 2010-03-31 22:50:33
不幸的是,這個問題每三天發生一次。另外,我一直無法將它指定到特定的代碼段(GDB表示它在發佈信號時發生,沒有在該行中引用指針)。 – Hans 2010-03-31 23:34:53