我正在检查核心转储,并注意到在一个帧中的“this”指针与下一帧(在同一线程中)不同。不仅仅是一点点不同,它从 0x8167428 变成了 0x200。
我不太精通 GDB,但这对我来说似乎不对。这是有问题的吗?如果是,原因可能是什么?
最佳答案
如果在不同的对象上调用下一帧中的函数(即使对象是同一类型),则 this
指针可以在 gdb 跟踪中的帧之间改变,因为这是为了具体实例。这可能不是您的问题。
0x200
不是 this
的有效值,几乎可以肯定表示某种类型的内存损坏。 this
指针有时存储在堆栈中并作为不可见的第一个参数传递给函数。因此,如果您损坏了堆栈(通过越界写入另一个变量),您可能会看到 this 指针已损坏。
值 0x200
本身很有趣。因为它非常接近 0
,但实际上不是 0
,所以它表明您正在查看的实例可能是位于 的另一个对象或数组的一部分从该对象/数组开始的 0x200
字节,并且该对象/数组的地址实际上是 NULL
。查看您的代码,您应该能够很容易地找出哪个对象已设置为 NULL
,这导致报告 0x200
。
关于c++ - "this"GDB 回溯中的指针变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556945/