C++程序异常退出问题总结

根据异常退出调用栈中的fault_address猜测异常原因:
1、fault_address=0x0 空指针
2、fault_address=较小的地址:野指针(空指针加偏移地址取数据)
3、fault_address=较大的地址:野指针

三个例子:
1、A类对象A_C将其成员函数A_x注册给B类对象B_C,类对象B_C调用函数A_x导致异常退出
原因: 类对象A_C析构后未解注册其成员函数A_x到类对象B_C,来将函数A_x指针置空。类对象B_C调用函数A_x时指针为野指针导致异常。
经验:

  1. 类对象析构时释放周边资源及让周边释放持有的自身资源;
  2. 析构时指针置空。

2、两个线程同时调同一个类对象A_C,一个线程X析构A_C,一个线程Y用A_C中指针成员变量m导致异常退出
原因: 线程X析构对象A_C后置指针成员变量m为nullptr,线程Y用指针成员变量m未判空导致异常退出。
经验:

  1. 使用指针必须判空。

3、类对象A_C通过接口返回结构体对象m指针,读取对象m中成员数据导致退出
原因: 正常情况返回的对象m的指针不为空,当前场景为空,取成员数据为野指针导致异常退出。
经验:

  1. 周边领域返回的数据不可信,必须指针判空
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值