我从指针列表中初始化一个指针。 我可以毫无问题地从该指针读取数据(第2行),但是当我尝试写入任何数据(第3行)时,它就会崩溃。
当我在第3行放置一个断点时,调试器显示指针基于其变量指向正确的对象。
DimensionItem *DI = DimItems[j];
qDebug() << "DI xposition: " << DI->pos().x();
DI->setPos(1,1);
如果我在第3行断点,我的应用程序输出是:
::Debug::{(../Zedspex/Widgets/automeasurewidget.cpp:434)}:: DI xposition: 5.15645e-312
一个弹出窗口,指出发生段故障。 这是dubugger发出的唯一消息:
signal 11 (Segmentation fault), address is 0x2c from 0x4340cec4
[bt]: (1) /usr/lib/libQt5Widgets.so.5(_ZN13QGraphicsItem6setPosERK7QPointF+0x8c) [0x4340cec4]
答案 0 :(得分:-1)
即使释放了内存,内存的内容也可能会停留在周围,因此从无效指针进行读取似乎可以正常工作。另一方面,如果您写入该位置,则可能会出现异常。
信号11(分段错误),地址从0x4340cec4开始为0x2c
0x2c
的地址非常低,表明指针为null
。
您提供的证据很少,实际上表明该指针无效。它可能已在某个时候被释放(通常在C ++中与delete
一起被释放,或者被错误的地址所覆盖。