Ich habe gesehen este Thema. Mein Fall ist etwas anders und ich kämpfe damit, herauszufinden, wie "this"
Der Zeiger wird beschädigt.
Ich verwende das Qt 4.6.2-Framework, mit deren QTreeView
mit meinem eigenen Modell. Der Backtrace, den ich erhalte (86 Frames lang, mit einer Menge Rekursionen, deshalb habe ich nicht alles eingefügt), ist folgendermaßen pastebin betrifft nur ihren Code.
Schließlich kommt es in QBasicAtomicInt::deref zu einem Assembler-Fehler, aber es ist offensichtlich, dass er weiter unten gestorben ist, wie diese drei Frames zeigen:
#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
Im Rahmen 17, this
es 0x942bb0
. Im Rahmen 16, this
sollte die gleiche sein, da sie in Frame 17 die Implementierung der gleichen Methode ihres Vorgängers aufruft. Jedoch this
wird zu 0x4.
Interessanterweise wird in Frame 15 (auch hier hat Frame 16 die Implementierung der gleichen Funktion durch seinen Vorgänger aufgerufen) der Zeiger "this" wieder auf 0x942bba0
.
Wenn Sie sich das Pastebin des vollständigen Backtrace ansehen, sehen Sie vielleicht einige "optimierte Werte". Ich hatte die Anwendung mit eingeschalteter Optimierung kompiliert; ich habe jetzt gcc auf -g3 -O0
Wenn es also das nächste Mal passiert, habe ich vielleicht etwas mehr. Aber natürlich kann ich es jetzt nicht mehr zum Absturz bringen - es ist ein ziemlich schwieriger Fehler (aber dennoch sehr wichtig zu beheben), also denke ich nicht, dass das zu verdächtig ist.
In Anbetracht der Optimierungen, ist das this
pointer=0x4
ungewöhnlich oder definitiv falsch? Was seltsam ist, ist, dass es keinen echten Code in einem dieser viewportEvent-Frames gibt - sie machen einfach einen Schalter auf den Typ des Ereignisses, es fällt durch die Switch-Anweisung, und es gibt die Implementierung seines Vorfahren zurück.
Valgrind scheint keine Probleme zu machen, obwohl ich es in Valgrind noch nicht zum Absturz gebracht habe.
Hat jemand dieses Verhalten schon einmal beobachtet? Was könnte die Ursache sein?