常出现程序崩溃的几种状况<C语言奔溃的原因内存越界,指针为空>
1)内存越界
具体的代码形式可为数组下标越界和指针移动越界,在操作一个数组或是指针之前,要明确其边界范围,不应访问不属于系统分配的内存区域。
2)指针为空
即此时通过指针访问的内存地址为0,这个地址系统是不允许访问的,系统也不会分配地址为0的内存给程序,这属于一种特殊的内存越界行为。空指针常见于未初始化或初始化(赋值)失败的指针变量。
程序崩溃对于程序猿来说,时经常出现的问题,如果你都没有出现过,那大佬快收下我的膝盖吧。程序崩溃一般都发生在运行时期,而崩溃的原因一般都是程序猿的失误所导致的,在这里我就总结了这几种程序崩溃的
读取未赋值的变量
这个错误一般是由于程序猿粗心大意,没有给变量初始化和赋值,导致该变量的值为脏值。
函数栈溢出
函数栈溢出一般是由两种情况引起的:
1、定义了一个体积太大的局部变量或者参数,参数和局部变量一般都是存储在栈中的,但是栈所占的内存空间很小,在32位下只占有8M的空间,因此如果没有使用malloc和new来在堆上创建内存空间的话,栈溢出就会很容易发生。
2、函数的嵌套调用的层次太深了,就像无穷递归和无穷的循环调用一样。
数组访问越界
这个是程序崩溃最常见的问题,这个就只需要程序猿仔细小心点了。
指针的目标对象不可用
指针所指向的对象要正常使用,它就必须是一个合法的,有效的,可以访问的对象,像当指针为空指针或者是野指针时,你再使用它程序就会立马崩溃。而出现空指针或者野指针一般都是下面这几种操作导致的:
1、指针未赋值
2、free/delete释放了该对象
3、不恰当的指针强制类型转换
参数错误
这个就是由于程序猿的猿性导致的了,我们一般为了保证参数合法,都会设置断言来保证只有参数合法的情况下程序才可以正常运行,因此这类错误一般都是由于触发了断言导致的。