容易造成core的原因

来源:互联网 发布:淘宝店合作合同 编辑:程序博客网 时间:2024/04/29 05:52

类别

子类别

描述

变量异常:

数组越界

字符串异常结束

局部变量过大

全局变量线程不安全

 

数组越界

使用数组必须检查下标越界

字符串异常结束

使用char sss[100]类似的字符串时,判断’\ 0’结束标志,而不是判断长度

局部变量过大

分配很大空间的局部变量导致栈溢出

全局变量线程不安全

多线程共同操作全局变量,但没有对该变量加锁

函数异常:

函数参数传替异常

函数过度递归调用

字符串安全函数

 

函数参数传替异常

对不确定参数个数的函数,例如 fmt 系列的,参数个数不对,导致栈被破坏

函数过度递归调用

过渡递归调用导致栈溢出

字符串安全函数

使用strcat,strcpy等很容易造成越界,推荐使用strncat,strncpy等函数,或者尽量不要使用字符数组,而使用std::string

内存异常:

内存分配异常

写保护内存

内存回收异常

共享内存异常

栈溢出

堆内存泄漏

 

内存分配异常

申请内存分配的时候不检查是否成功,或者使用一些内存管理库,申请的内存有长度限制

写保护内存

对受保护内存数据强行赋值

内存回收异常

重复释放内存空间或释放不存在的指针地址空间

共享内存异常

挂接共享内存不检查大小是否不匹配,或者操作前不用信号锁

栈溢出

因为在函数局部使用很大的局部变量,导致栈溢出

堆内存泄漏

直接对内存指针赋值为空或使用完内存不释放

指针异常:

空指针

野指针

指针强制转换

 

空指针

空指针异常,要严格的控制指针的使用,每个可能出现空指针的地方都要注意检查

野指针

野指针所指的内存区域已经释放或者不再映射到进程空间,这时对这块指针指向的内存进行操作,就会可能core

指针强制转换

在使用强制类型转换时要注意,尤其是强制转换一个类型指针的时候

操作异常:

更新so时直接覆盖

 

更新so时直接覆盖

更新so的时候,如果是覆盖so,会导致进程异常core掉,正确做法视 代码实现而定

原创粉丝点击