C++ SIGSEGV check list

  1. C++丢了很长时间了,没想到还有捡回来的一天,各种不适应,尤其是指针相关的,SIGSEGV这几天真没少见,总结下自己遇到的SIGSEGV case,下面这个可以作为一个check-list:
    1. null指针解引用,这个就不说了,解引用前自己做好预防。
    2. 要求返回值的函数实现时没有返回值,按理说IDE会提示,但是目前看AS很多时候是不会提示的。
    3. 使用RAII对象管理内存时,因为临时对象析构的原因导致RAII对象内管理的内存被释放,成了野指针。这一点一般比较隐秘,你能做的也就是尽量使用指针/引用,但不可能完全规避。打个比方,遍历提取数据时,经常会在外边声明一个临时的对象作为每次的提取容器,然后push_back到vector中,这个临时变量就是隐患。unique_ptr等智能指针也能减少这种隐患。
    4. 从Java等其他Class成员变量自动初始化的世界来到C++世界,可惜C++是不会替你初始化大部分成员变量的(除了static等特例),稳妥的做法就是在构造函数/初始化列表把所有的成员变量都初始化(当然了,类成员变量一般不用,但是前提是类成员变量自己的构造函数可靠的完成了自己的初始化)。
    5. 线程同步问题。其实这个不能说是root cause,只能说是一种可能诱因。线程同步的不对会导致任何的问题,SIGSEGV只是其中一种。比如你有一个Vector来盛放指针,你在线程A对Vector进行写操作(释放Vector保存的指针,并释放其指向的内存),在线程B对Vector进行读操作(解引用)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值