나는 this 스레드를 보았습니다. 내 경우는 약간 다르며 나는 "this"
포인터가 어떻게 손상되는지 파악하기 위해 고심하고있다."this"포인터가 스택 추적에서 손상됨
저는 자신의 모델로 QTreeView
을 사용하여 Qt 4.6.2 프레임 워크를 사용하고 있습니다. 나는에 전체를 붙여하지 않은 이유를 재귀의 많은 내가 얻는 역 추적 (86 프레임 길이는, 그이 pastebin는 자신의 코드를 포함에 그것의,입니다. 드디어 QBasicAtomicInt 일부 어셈블러에 세그먼테이션 폴트 (segfault)
:: DEREF하지만 그것이 다음 세 개의 프레임으로 더 해졌다 입증되었음을 분명하다 :. 프레임 (17)에
#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
, this
가 0x942bb0
인 프레임 (16)에 this
프레임 (17)이 부르고 같이 동일해야 그 같은 방법의 조상의 구현입니다. 그러나 this
은 0x4가됩니다.
흥미롭게도 프레임 15에서 (다시, 프레임 16은 조상의 동일한 기능의 구현을 호출했습니다) 'this'포인터는 0x942bba0
으로 복원됩니다.
전체 백 트레이스의 pastebin을 보면 'value optimized out'을 볼 수 있습니다. 최적화가 적용된 응용 프로그램을 컴파일했습니다. 이제는 gcc가 -g3 -O0
으로 설정되었으므로 다음 번에 더 많은 것을 할 수 있습니다. 하지만 물론 지금은 충돌을 일으킬 수 없습니다. 너무 의심스러운 일이 아니기 때문에 매우 어려운 버그가 발생합니다 (그러나 그럼에도 불구하고 수정하는 것이 중요합니다).
최적화가 주어진 경우 this
pointer=0x4
이 비정상입니까 아니면 틀린가요? 이상한 점은이 viewportEvent 프레임에 실제 코드가 없다는 것입니다. 이벤트 유형에 대한 전환 만 수행하면 switch 문을 통해 빠져 나오고 조상의 구현을 반환합니다.
Valgrind는 Valgrind에서 아직 충돌을 일으키지 않았지만 모든 문제를 던지고있는 것 같지 않습니다.
이전에이 동작을 본 사람이 있습니까? 무엇 때문에 그 원인이 될 수 있습니까?
+1, 오랫동안 나는 나의 코드에서 같은 문제를 보았다. 나는 그것을 어떻게 고쳤는지 모른다. 그러나 나는 옛날을 생각 나게한다.:) – iammilind
코드를 컴파일 할 때 경고가 나타 납니까? 먼저 수정하십시오. –
@ iammilind : 이것은 별을 클릭하여 좋아하는 질문을하는 이유입니다.하지만 투표를 높이는 이유는 아닙니다. –