我看過this線程。我的情況稍有不同,我正在努力弄清楚"this"
指針是如何被損壞的。「this」指針在堆棧跟蹤中被損壞
我使用的Qt 4.6.2框架,使用他們的QTreeView
與我自己的模型。我得到的回溯(86幀長,遞歸很多,這就是爲什麼我沒有粘貼整個東西,它在這個pastebin只涉及到他們的代碼。
它終於在QBasicAtomicInt中的某些彙編器上segfaults: DEREF,但很明顯,它已經死了進一步下跌,證明這三個框架:
#15 0x01420fd3 in QFrame::event (this=0x942bba0, e=0xbf8eb624) at widgets/qframe.cpp:557
#16 0x014bb382 in QAbstractScrollArea::viewportEvent (this=0x4, e=0x93f9240) at widgets/qabstractscrollarea.cpp:1036
#17 0x0156fbd7 in QAbstractItemView::viewportEvent (this=0x942bba0, event=0xbf8eb624) at itemviews/qabstractitemview.cpp:1610
在幀17,this
是0x942bb0
在幀16,this
應該是相同的,如幀17它調用其祖先執行相同的方法,但this
變爲0x4。
有趣的是,在第15幀中(同樣,第16幀已經稱它的祖先實現了相同的功能),'this'指針被恢復到0x942bba0
。
如果您查看完整回溯的pastebin,則可能會看到一些「優化值」。我有應用程序編譯優化;我現在已經將gcc設置爲-g3 -O0
,所以當下次發生這種情況時我可能會有更多的東西。但是,當然現在我不能讓它崩潰 - 這是一個相當困難的錯誤發生(但對於修復非常重要),所以我不認爲這太可疑。
鑑於優化,是this
pointer=0x4
異常或絕對錯?奇怪的是,這些viewportEvent框架中沒有真正的代碼 - 它們只是在事件類型上進行切換,它通過switch語句進行切換,並返回其祖先的實現。
Valgrind似乎沒有拋出任何問題,儘管我還沒有讓它在Valgrind中崩潰。
有沒有人見過這種行爲?什麼可能導致它?
+1,很久以前我看到了與我的代碼相同的問題;我不知道我是如何修復它的;但讓我想起了舊時光。:) – iammilind
當你編譯代碼時是否有任何警告?先修復它們。 –
@iammilind:這是使這個問題成爲最受歡迎的問題的原因(通過點擊明星),但不是用於投票。 –