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