我正在检查核心转储,并注意到在一个帧中,'this'指针与下一帧(在同一个线程中)不同。不仅有点不同,它从0x8167428变为0x200。
我不是很精通使用GDB,但这对我来说似乎不对。这有问题,如果是,可能是什么原因?
答案 0 :(得分:3)
如果在另一个对象上调用下一帧中的函数(即使对象是同一类型),this
指针可以在gdb跟踪中的帧之间更改,因为这是针对特定实例的。这可能不你的问题。
0x200
不是this
的有效值,几乎可以肯定地表示某种类型的内存损坏。 this
指针有时存储在堆栈中,并作为不可见的第一个参数传递给函数。因此,如果您已经损坏了堆栈(通过越过边界写入另一个变量),您可能会看到此指针已损坏。
值0x200
本身很有趣。因为它非常靠近0
,但实际上不是0
,它表示您正在查看的实例可能是另一个对象或数组的一部分,从一开始就位于0x200
个字节该对象/数组,并且对象/数组的地址实际上是NULL
。查看代码,您应该可以非常轻松地找出哪个对象已设置为NULL
,这导致此报告0x200
。
答案 1 :(得分:1)
代码中的优化可能会使调试器混乱。调试零售代码时,这是一个常见问题。尝试禁用优化,重新运行方案,看看是否遇到同样的问题。
答案 2 :(得分:0)
this
指针是帧的本地。
另一帧是否属于'C'功能,你可以看到像0x200
的smth