Qt\c++:指针虽好用,使用有风险

24 篇文章 0 订阅

     学习C++有一段时间了,c++中指针是十分好用的工具,也一直听大家将存在风险,使用稍不慎就会导致野指针(指空);虽然一直明白,但从未真正遇到过此类问题。最近在用Qt做一个程序时,真正的领略了一把野指针带来的危害,真是打脸之后,才领悟到其中真谛(痛的领悟)

    描述一下背景:

           程序的一个大概结构:在主界面中实例化了一个进度对话框和图形浏览器;在图形浏览器下实例化了一个图形处理任务;该图像处理实例下又有几个小的算法实例构成。

         为增强用户体验:在执行图形处理任务时候,开启进度对话框;采取策略是把进度对话框的指针一层层传递到任务算法中,在建立信号槽连接(直接传递信号没有传递指针来的轻巧;而且进度对话框的生命周期与程序一样长的,所以原本认为应该是绝对安全的);


描述问题:

     整个程序在运行期间没有任何问题,在关闭程序的时候,会出现程序崩溃

 Qt error: Exception at 0x58083aea,: read access violation at: 0x0, flags=0x0 (first
 

解决:

想了一下,肯定是析构时候出了问题。然后再回头去看程序的析构顺序,发现了大问题,竟然先把进度对话框析构掉了,然后再析构的图像处理任务实例;这必然会造成野指针;这还不是程序奔溃的主要原因;主要原因是,在析构图像处理任务实例时候,还调用了这个野指针来断开信号槽连接;然后就没有然后,直接就泪奔了;


痛的领悟:

    指针是好用,还是要绝对小心;使用指针一定要确保指针还是正确指向目标对象。还有野指针不是最可怕,最可怕他是野指针了 你还去调用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值