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
一个弹出窗口说发生了段错误。这是来自调试器的唯一消息:
signal 11 (Segmentation fault), address is 0x2c from 0x4340cec4
[bt]: (1) /usr/lib/libQt5Widgets.so.5(_ZN13QGraphicsItem6setPosERK7QPointF+0x8c) [0x4340cec4]
解决方案
即使在你释放它之后,内存的内容可能仍然存在,因此从无效指针读取可能会起作用。另一方面,如果您写入该位置,您可能会遇到异常。
信号 11(分段错误),地址为 0x2c,来自 0x4340cec4
的地址0x2c
非常低,表明指针是null
。
您提供的证据很少表明该指针实际上是无效的。它可能delete
在某个时候被释放(通常在 C++ 中)或被错误的地址覆盖。
推荐阅读
- python - 如何制作只能采用整数的 if 语句?蟒蛇 3
- linux - 如何以表格形式显示程序和文件的组合输出并在 1 秒内观看
- flutter - Flutter:如何在文本下添加按钮
- iis-7 - IIS express 和 IIS7 路径
- javascript - 使用 config-all.json 生成的modernizr.js 出错
- r - 决策树和特征重要性:为什么决策树没有显示所有变量的重要性?
- regex - PowerShell 中用于自定义排序的正则表达式
- swift - 从呈现为字符串的 JSON 解析十进制
- java - Spring-boot mongoTemplate如何在mongoDB中找到具有最大值的实体
- java - 以编程方式将侦听器设置为 CheckBox 数组