好的,首先,这是我的代码:
HyperSprite::HyperSprite()
{
_view = 0;
}
void HyperSprite::publish(QGraphicsView* view) {
_view = view;
}
void HyperSprite::getKFrame() {
if(_view != 0) {
qDebug()<<(void*)_view;
}
}
现在,如果我从HyperSprite::getKFrame()
内拨打main()
,我会收到输出:
0xbf8ffb84
我有一台TCP服务器,需要这个QGraphicsView*
变量。因此,无论何时建立新连接,都会调用HyperSprite::getKFrame()
。但是,每当我建立与服务器的连接时,这就是输出:
0x1e425ff
老实说,我不明白这一点。成员的价值不应该始终保持一致吗?为什么指针值会改变?很明显,每当我尝试使用_view指针访问其任何成员时,就会发生分段错误。我尝试使用QSharedPointer,但它也导致了同样的问题。 QSharedPointer的数据会自动更改。为什么会这样?
答案 0 :(得分:1)
“成员的值是否应始终保持相同?”否。如果它不是常量,并且如果它被赋值为新值,则会发生变化。
不包括计算内存违规,可能会有以下解决方案:
这种情绪......
答案 1 :(得分:0)
如果任何变量正在改变(如果它是一个成员并不重要,如果它是一个指针并不重要),当你没有分配它时,你有一个内存管理错误在其他地方在您的计划中。
它可以迭代一个缓冲区的一端,它可能是在释放它指向它的对象之后使用一个悬空指针,它可能是使用一个从未初始化的指针。
如果您可以使用Dialecticus评论的数据断点,您将能够非常轻松地找到此特定错误。通常,您应该使用像valgrind这样的工具来检查这样的内存管理错误,因为导致此问题的样式可能会产生您尚未注意到的其他错误。
答案 2 :(得分:0)
听起来你的数据会因为流程边界而受到影响。