指针引起的崩溃分析

指针引起的崩溃问题,常见的原因如下:

指针未判空

劳资还没干货呢,你就让劳资干活了。
这种情况实际项目当中是非常多的,即使你用了智能指针,也还是无法避免。当工程很庞大复杂而且一个类都有可能多个人负责的时候,那么这个指针的访问堆栈确实千变万化,你无法确定是哪里调到这里来的,也就无法确保该指针一定指向了某一对象,当然判空不一定能解决这类问题的逻辑错误,但是至少能保证不会在这里崩溃。

指针野了

野孩子还到处乱跑,不出问题才怪。
野指针的原因有简单的也有复杂的,单线程内这个问题其实很好解决,怕的就是多线程,多处都存在释放这个对象的可能,偶现了崩溃直接看代码根本无法确定是哪里多管闲事释放了该对象,而此时的dump文件也无能为力,因为dump也无法告诉你这个对象到底是在哪里释放了,只能告诉你在这里指针野了,崩溃了。遇到这类偶现问题,一个好的方案是可以打出一个测试版本,在所有释放该对象的地方强制崩溃,这样就有可能捕获到是哪个小婊砸在意料之外释放了。仅供参考的一个小技巧。

虚表被玩儿坏了

当然这种说法是欠准确的,你一个类的虚表被破坏了那可真是奇了个葩,更多可能是虚指针乱了,有可能你“任性”的做了类型转换,导致这个指针根本不应该访问那个类的虚函数,但是强制类型转换用的又是如此的顺手,只能祈祷你自己编码更加规范,思路更加严谨了。另一个原因,就是其他地方越界了,非法写入导致这个指针内容被破坏了,这时候不崩溃才怪呢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值