写入时出现段错误,但读取时不出现

时间:2019-06-14 15:08:38

标签: c++

我从指针列表中初始化一个指针。 我可以毫无问题地从该指针读取数据(第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

我可以在调试器中看到DI中的数据: DI in debugger before seg fault

一个弹出窗口,指出发生段故障。 这是dubugger发出的唯一消息:

signal 11 (Segmentation fault), address is 0x2c from 0x4340cec4
[bt]: (1) /usr/lib/libQt5Widgets.so.5(_ZN13QGraphicsItem6setPosERK7QPointF+0x8c) [0x4340cec4]

1 个答案:

答案 0 :(得分:-1)

即使释放了内存,内存的内容也可能会停留在周围,因此从无效指针进行读取似乎可以正常工作。另一方面,如果您写入该位置,则可能会出现异常。

  

信号11(分段错误),地址从0x4340cec4开始为0x2c

0x2c的地址非常低,表明指针为null

您提供的证据很少,实际上表明该指针无效。它可能已在某个时候被释放(通常在C ++中与delete一起被释放,或者被错误的地址所覆盖。