好的,首先,这是我的代码:
HyperSprite::HyperSprite()
{
_view = 0;
}
void HyperSprite::publish(QGraphicsView* view) {
_view = view;
}
void HyperSprite::getKFrame() {
if(_view != 0) {
qDebug()<<(void*)_view;
}
}
现在,如果我从 main()
中调用 HyperSprite::getKFrame()
,我会得到输出:
0xbf8ffb84
我有一个 TCP 服务器,它需要这个 QGraphicsView*
变量。因此,无论何时建立新连接,都会调用 HyperSprite::getKFrame()
。但是,每当我连接到我的服务器时,这就是输出:
0x1e425ff
老实说,我不明白这一点。成员的值(value)不应该始终保持不变吗?为什么指针值会改变?很明显,每当我尝试使用 _view 指针访问其任何成员时,都会发生段错误。我尝试使用 QSharedPointer,但它也会导致同样的问题。 QSharedPointer 的数据自动改变。为什么会这样?
最佳答案
“一个成员的值不应该始终保持不变吗?”不应该。如果它不是 const,并且如果它被分配给一个新值,它就会改变。
排除内存违规,可能有这些解决方案:
- 您处理另一个 HyperSprite 对象,因此它可能具有不同的 _view 成员。
- void publish(QGraphicsView* view) 在不同的 QGraphicsView 上被多次调用。或另一个修改 _view 值的函数成员...
- 您的 _view 是公开的,并且外部对象更改了它的值
- 一个对象被定义为你的对象的 friend 并且修改了_view的值
这种心情的东西......
关于c++ - 具有不同值的指针成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578895/