He visto this hilo. Mi caso es un poco diferente y estoy luchando para descubrir cómo el puntero "this"
se corrompe."este" puntero se corrompe en el seguimiento de la pila
Estoy usando el framework Qt 4.6.2, usando su QTreeView
con mi propio modelo. La traza inversa que obtengo (86 fotogramas de largo, con mucha recursividad, es por eso que no he pegado todo, es en este pastebin solo implica su código.
Finalmente segfaults en algún ensamblador en QBasicAtomicInt :: DEREF, pero es obvio que ha muerto más abajo, evidenciado por estos tres cuadros:.
#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
en marco 17, this
es 0x942bb0
en marco 16, this
debe ser el mismo, como en el bastidor 17 que está llamando a su Implementación de un antepasado del mismo método. Sin embargo, this
se convierte en 0x4.
Curiosamente en el cuadro 15 (de nuevo, el cuadro 16 ha llamado a su antecesor la implementación de la misma función), el puntero 'this' se restaura a 0x942bba0
.
Si miraba el pegado de la traza trasera completa, es posible que vea un "valor optimizado fuera". Hice que la aplicación compilara con optimización; Ahora tengo gcc configurado en -g3 -O0
así que cuando suceda la próxima vez podría tener algo más. Pero, por supuesto, ahora no puedo hacer que se cuelgue; es un error bastante difícil de realizar (pero, no obstante, es muy importante solucionarlo), así que no creo que sea demasiado sospechoso.
Teniendo en cuenta las optimizaciones, ¿this
pointer=0x4
es inusual o definitivamente incorrecto? Lo que es extraño es que no hay un código real en ninguno de estos marcos de evento viewport; simplemente hacen un cambio en el tipo de evento, cae a través de la instrucción switch y devuelve la implementación de su antecesor.
Valgrind no parece estar planteando ningún problema, aunque todavía no lo he hecho colapsar en Valgrind.
¿Alguien ha visto este comportamiento antes? ¿Qué podría estar causando eso?
+1, long back He visto el mismo problema con mi código; No sé cómo lo había arreglado; pero me recuerda a los viejos tiempos.:) – iammilind
Cuando compila el código, ¿hay alguna advertencia? Solucionarlos primero. –
@iammilind: Esa es una razón para hacer que esta sea una pregunta favorita (al hacer clic en la estrella), pero no para subirla. –