2021-05-14

根据从业多年的经验,使用C/C++开发的应用程序发生了运行崩溃,其主要原因有几点:

  1. 指针操作不当
    1.1 指针未初始化
    一个指针在Debug下编译器自动将其初 始化为NULL,一块缓存同样在Debug下编译器会自动将该块缓存中的所有字节初始化为0
    然而Release下则不会发生这样的事情,需要程序中有初始化的代码。
    1.1.2 指针越界读写
    这个错误几乎所有的开发人员都会犯,有个好办法可以避免:用模板类封装指针,重载+=和-=操作符,在里面判断是否越界。
    1.1.3 指针用完释放后未置NULL
    一个良好的习惯是在指针使用完毕并释放后,显示的将该指针值为NULL,如此避免了野指针的出现。
  2. 内存资源耗尽
    2.1 动态申请的指针使用完毕后不释放,导致内存泄露。
    2.2 容器(vector/list/map等)的旧的失效数据不及时清除,导致垃圾数据堆积。
    2. 3 文件,套接字等内核对象使用完毕后不释放(关闭句柄),导致内核资源耗尽。
  3. 数据的同步问题
    3.1 对一块数据读写时不进行互斥保护,导致多线程读写产生坏数据。
    3.2 单线程下对于可递归重入的函数缺乏调用保护,导致数据读写错乱
    3.3 多线程下读写非 volatile 关键字修饰的全局变量导致的数据同步问题。(Debug下不发生,Release下频繁发生)
  4. 数据溢出
    4.1 每种常规类型的数据都有范围,超出其范围将导致数据溢出,溢出后数据归零,如此会产生计算错误或分母为零的情况,造成崩溃。
  5. 堆栈溢出
    5.1 堆栈溢出的现象虽不常见但绝对存在,函数内存在多个局部大尺寸结构体或Class对象,而且函数调用期间又产生了多个大尺寸局部临时对象,如此会导致堆栈溢出,返回地址被覆盖,运行崩溃。
    还有其他会造成程序运行崩溃的情况,就不一一列举了,总之要确保程序安全高效稳定的运行,必须要有足够的经验和知识来支撑。## 程序运行崩溃
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值