首页 > 解决方案 > 写入时出现段错误,但读取时没有

问题描述

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

一个弹出窗口说发生了段错误。这是来自调试器的唯一消息:

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

标签: c++

解决方案


即使在你释放它之后,内存的内容可能仍然存在,因此从无效指针读取可能会起作用。另一方面,如果您写入该位置,您可能会遇到异常。

信号 11(分段错误),地址为 0x2c,来自 0x4340cec4

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

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


推荐阅读