C++ 常见崩溃问题分析

C++ 常见崩溃问题分析

http://blog.csdn.net/kyfvc/article/details/7185365

一、前言

从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来的经验,以期通过自己的经历为他人和自己带来福祉:写出更高质量的程序;

由于 C 和 C++ 这两种语言血缘非常近,文本亦对 C 编程语言有借鉴作用;

二、C++ 崩溃分类

一切的偶然并非偶然

在编程实践中,遭遇到了诸如内存无效访问、无效对象、内存泄漏、堆栈溢出等很多C / C++ 程序员常见的问题,最后都是同一个结果:程序崩溃,为解决崩溃问题,过程都是非常让人难以忘怀的;

可谓吃一堑长一智,出现过几次这样的折腾后就寻思找出它们的原理和规律,把这些典型的编程错误一网打尽,经过系统性的分析和梳理,发现其内在机理大同小异,通过对错误表现和原理进行分类分析,把各种导致崩溃的错误进行归类,详细分类如下:

错误类型

具体表现

备注(案例)

声明错误

变量未声明

编译时错误

初始化错误

未初始化或初始化错误

运行不正确

访问错误

1、  数组索引访问越界

2、  指针对象访问越界

3、  访问空指针对象

4、  访问无效指针对象

5、  迭代器访问越界

内存泄漏

1、  内存未释放

2、  内存局部释放

参数错误

本地代理、空指针、强制转换

堆栈溢出

调用堆栈溢出:

1、递归调用

2、循环调用

3、消息循环

4、大对象参数

5、大对象变量

参数、局部变量都在栈(Stack)上分配

转换错误

有符号类型和无符号类型转换

内存碎片

小内存块重复分配释放导致的内存碎片,最后出现内存不足

数据对齐,机器字整数倍分配

其它如内存分配失败、创建对象失败等都是容易理解和相对少见的错误,因为目前的系统大部分情况下内存够用;此外除0错误也是容易理解和防范;

C++记录程序崩溃时的dumpfile

http://anfernee.blog.51cto.com/4828774/994536

    

        C++程序崩溃生成dump

http://blog.csdn.net/whatday/article/details/44857921

原文地址:https://www.cnblogs.com/chulia20002001/p/7068339.html