HEAP: HEAP: Free Heap block xx modified at xxafter it was freed 堆内存出现野指针错误

news/2024/10/18 22:37:37/

首先看下问题提示:

HEAP[SimEng.exe]: HEAP: Free Heap block 000002CA51FC08A0 modified at 000002CA51FC0950 after it was freed

Ok,碰到这种xxxx地址的报错提示就慌得一批。

解答

经过一种暴力式解谜,找到以下的原因(解谜过程不建议也不见得能复用,基本上就是看堆栈,“偶然”看到有熟悉的名字就去找到用到的地方,然后一点一点注释,然后找不同,极其低效QAQ):
原因:
关闭窗口,开始执行析构:
1.从mainwindow开始析构:
在这里插入图片描述
2.析构它的孩子(m_osgwidget):
在这里插入图片描述
在这里插入图片描述
3.析构其他孩子(MAP_OSG_LayerControlWidget):
在这里插入图片描述
在这里插入图片描述

真相只有一个:3中析构调用了2中已经被析构的指针!
据说Qt对象树的析构并不能指定顺序 所以在Qt对象的析构中不能调用兄弟指针。

解决方案:
注释掉3.中析构这调用就行了,要用可以写个closeEvent方法保险一些。

后言

这里只是提供了关于内存出错的一种经验,毕竟C++内存管理是非常复杂而且技术多样的地方。这里由于是在程序退出,执行析构的时候出现的错误(堆内存释放),所以出现野指针的问题跟一般情况有些出入,对比普通的野指针异常更难发现问题了(在看堆栈的时候全是qt内存管理机制,看不懂…)。总之出现问题还是多翻看自己的代码(也可能是别人的,笑)

反思:
暴力破解问题的思路实属不可取,效率低效之余全靠运气QAQ
据说可以通过重写new和delete的操作,记录分配的内存,然后写一个查询函数,即可通过vs的监视窗口顺利找到出问题的内存块对应的对象。
当然可能可以通过一些工具方便做到这点吧…继续加油…


http://www.ppmy.cn/news/248249.html

相关文章

6174问题

描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-12343087、8730-3788352、8532-23586174,又…

openstack报错排查

openstack各个组件 openstack要保证各个组件能正常启动 否则创建实例等会报错 在启动openstack的时候 要查看各个服务是否正常启动了,如果有部分服务没有启动,则项目不能正常运行 [rootcontroller ~]# systemctl status open openstack-aodh-api.serv…

Spark执行spark-shell 报错 Cannot create directory /tmp/hive/root/xxx. Name node is in safe mode

1. 问题: Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 20/11/05 21:03:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your pla…

Cannot create directory /tmp/hive/root/...... Name node is in safe mode

因为hadoop的安全模式导致dbeaver不能连接hive报错 Cannot create directory /tmp/hive/root/… Name node is in safe mode 什么原因导致hadoop集群启动安全模式 Df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 32G 0 32G 0% /dev tmpfs 32G 0 32G 0% /dev/shm t…

11.6 MariaDB安装 11.7/11.8/11.9 Apache安装

2019独角兽企业重金招聘Python工程师标准>>> 11.6 MariaDB安装 准备工作 因为MariaDB的二进制包镜像源在国外地址,所以预先下载了该包到本地物理机,使用lrzsz工具将该包上传至虚拟机/usr/local/src目录进行安装。用的香港的云服务器下载 上传…

RTL系列WIFI模组Linux驱动移植

文章目录 1 驱动源码下载2 驱动移植2.1 源码的拷贝2.2 源代码的修改2.3 将wifi 驱动添加到内核中2.3.1 修改 Kconfig 文件2.3.2 修改Makefile2.3.3 配置Linux内核2.3.4 编译 RTL8723BU 驱动模块 3 编译出错解决3.1 _seqdump 错误3.2 __DATE__ 和 __TIME__ 错误3.3 strnicmp错误…

haproxy安装可能出现的问题

问题一: 启动提示错误: haproxy.service: Failed at step EXEC spawning /chris/haproxy/sbin/haproxy: Permission denied 解决方案: SELinux 搞的鬼。 关闭 sed -i s/enforcing/disabled/ /etc/selinux/config #永久 setenforce 0 #临…

2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“

2020年第十一届蓝桥杯决赛JAVA B G题"皮亚诺曲线距离" 2020国赛 JAVA B组 个人题解目录 【问题描述】 皮亚诺曲线是一条平面内的曲线。 下图给出了皮亚诺曲线的 1 阶情形,它是从左下角出发,经过一个 33 的 方格中的每一个格子,最终…