Tôi đã xem chủ đề this. Trường hợp của tôi hơi khác một chút và tôi đang cố gắng tìm ra cách con trỏ "this"
bị hỏng."con trỏ" này bị lỗi trong theo dõi ngăn xếp
Tôi đang sử dụng khung Qt 4.6.2, sử dụng QTreeView
với mô hình của riêng tôi. Các backtrace tôi nhận được (86 khung hình dài, với rất nhiều đệ quy, đó là lý do tại sao tôi đã không dán toàn bộ điều trong, nó trong này pastebin chỉ liên quan đến mã của họ. deref, nhưng nó rõ ràng rằng nó đã chết tiếp tục xuống, bằng chứng là ba khung:.
#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
trong khung 17, this
là 0x942bb0
trong khung 16, this
nên giống nhau, như trong khung 17 nó đang gọi của nó thực hiện cùng một phương thức của tổ tiên Tuy nhiên, this
trở thành 0x4.
Điều thú vị đủ trong khung 15 (một lần nữa, khung 16 đã được gọi là tổ tiên của nó thực hiện cùng chức năng), con trỏ 'này' được khôi phục thành 0x942bba0
.
Nếu bạn nhìn vào dấu vết của backtrace đầy đủ, bạn có thể thấy một số 'tối ưu hóa giá trị'. Tôi đã có ứng dụng được biên dịch với tối ưu hóa; Bây giờ tôi đã đặt gcc thành -g3 -O0
vì vậy khi nó xảy ra vào lần tới, tôi có thể có thứ gì đó hơn. Nhưng tất nhiên bây giờ tôi không thể làm cho nó sụp đổ - đó là một lỗi khá khó khăn để làm cho xảy ra (nhưng rất quan trọng để sửa chữa dù sao) vì vậy tôi không nghĩ rằng đó là quá đáng ngờ.
Được tối ưu hóa, có phải là this
pointer=0x4
không bình thường hoặc chắc chắn sai? Điều kỳ lạ là không có mã thực trong bất kỳ khung viewportEvent nào - chúng chỉ đơn giản là thực hiện một chuyển đổi trên loại sự kiện, nó rơi qua câu lệnh switch và nó trả về việc thực hiện của tổ tiên nó.
Valgrind dường như không phát sinh bất kỳ vấn đề nào, mặc dù tôi chưa gây ra sự cố trong Valgrind.
Có ai đã từng xem hành vi này trước đây không? Điều gì có thể gây ra nó?
+1, từ lâu tôi đã thấy cùng vấn đề với mã của mình; Tôi không biết làm thế nào tôi đã sửa nó; nhưng nhắc tôi về thời xưa.:) – iammilind
Khi bạn biên dịch mã, có cảnh báo nào không? Hãy sửa chúng trước. –
@iammilind: Đó là lý do để làm cho câu hỏi này trở thành một câu hỏi yêu thích (bằng cách nhấp vào dấu sao), nhưng không phải để bỏ phiếu. –