我检查核心转储,并注意到,在一帧中的“这个”指针比在下一帧(在同一个线程)不同。不只是有点不同,它从0x8167428到0x200。“this”指针变化回溯
我不是很熟练使用GDB,但这看起来并不正确。这是否有问题,如果有的话,可能是什么原因?
我检查核心转储,并注意到,在一帧中的“这个”指针比在下一帧(在同一个线程)不同。不只是有点不同,它从0x8167428到0x200。“this”指针变化回溯
我不是很熟练使用GDB,但这看起来并不正确。这是否有问题,如果有的话,可能是什么原因?
不便的this
指针可以在GDB跟踪帧之间改变,如果在下一帧中的函数被调用一个不同的对象(即使对象是相同的类型),因为这是针对特定的实例。这大概是不是你的问题。
0x200
对于this
不是有效值,并且几乎肯定表示某种类型的内存损坏。 this
指针有时存储在堆栈中,并作为不可见的第一个参数传递给函数。所以,如果你损坏了堆栈(通过跳出写入另一个变量的界限),你可能会看到这个指针被破坏了。
值0x200
本身很有趣。因为它是如此接近0
,但实际上没有0
,则表明你看实例可能是另一种对象或数组,位于从对象/数组开始0x200
字节的一部分,该对象/数组地址实际上是NULL
。看着你的代码,你应该很容易找出哪个对象被设置为NULL
,这导致它报告0x200
。
你能否在你的问题中添加一些代码来重现这一点? – 2010-03-31 22:50:33
不幸的是,这个问题每三天发生一次。另外,我一直无法将它指定到特定的代码段(GDB表示它在发布信号时发生,没有在该行中引用指针)。 – Hans 2010-03-31 23:34:53