我看过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:这是使这个问题成为最受欢迎的问题的原因(通过点击明星),但不是用于投票。 –