] Указатель this поврежден в трассировке стека [

] [

] Я видел [] эту [] ветку. Мой случай немного отличается, и я изо всех сил пытаюсь понять, как [] "этот" [] указатель повреждается. [

] [

] Я использую структуру Qt 4.6.2, используя их [] QTreeView [] с моей собственной моделью. Я получаю обратную трассировку (длина 86 кадров, с большим количеством рекурсии, поэтому я не вставил все это целиком, он в этом [] pastebin [] включает только их код. [

] [

] Наконец-то произошла ошибка на каком-то ассемблере в QBasicAtomicInt :: 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 [] этот [] равен [] 0x942bb0 []. В кадре 16 [] этот [] должен быть таким же, как в кадре 17, он вызывает реализацию того же метода своего предка. Однако [] это [] становится 0x4. [

] [

] Достаточно интересно, что в кадре 15 (опять же, кадр 16 вызвал реализацию той же функции своего предка) указатель this восстанавливается до [] 0x942bba0 []. [

] [

] Если вы посмотрите на pastebin полную трассировку, вы можете увидеть некоторую «оптимизированное значение». Я скомпилировал приложение с включенной оптимизацией; Теперь у меня gcc установлен на [] -g3 -O0 [], поэтому, когда это произойдет в следующий раз, у меня может быть что-то еще. Но сейчас, конечно, я не могу заставить его вылететь из строя - это довольно сложная ошибка (но, тем не менее, ее очень важно исправить), поэтому я не думаю, что это слишком подозрительно. [

] [

] С учетом оптимизации, является ли [] этот [] [] указатель = 0x4 [] необычным или определенно неправильным? Странно то, что ни в одном из этих фреймов viewportEvent нет реального кода - они просто переключают тип события, оно не проходит через оператор switch и возвращает реализацию своего предка. [

] [

] Valgrind, похоже, не вызывает никаких проблем, хотя я еще не делал сбоев в Valgrind. [

] [

] Кто-нибудь видел такое поведение раньше? Что могло быть причиной этого? [

]

11
задан Community 23 May 2017 в 12:01
поделиться