2011年(18)
分类: C/C++
2011-03-03 16:48:27
类别 |
子类别 |
描叙 |
变量 |
数组越界 |
使用数组必须检查下标越界 |
字符串异常结束 |
使用char sss[100]类似的字符串时,判断’\ 0’结束标志,而不是判断长度 | |
局部变量过大 |
分配很大空间的局部变量导致栈溢出 | |
全局变量线程不安全 |
多线程共同操作全局变量,但没有对该变量加锁 | |
函数 |
函数参数传替异常 |
对不确定参数个数的函数,例如 fmt 系列的,参数个数不对,导致栈被破坏 |
函数过度递归调用 |
过渡递归调用导致栈溢出 | |
字符串安全函数 |
使用strcat,strcpy等很容易造成越界,推荐使用strncat,strncpy等函数,或者尽量不要使用字符数组,而使用std::string | |
内存 |
内存分配异常 |
申请内存分配的时候不检查是否成功,或者使用一些内存管理库,申请的内存有长度限制 |
写保护内存 |
对受保护内存数据强行赋值 | |
内存回收异常 |
重复释放内存空间或释放不存在的指针地址空间 | |
共享内存异常 |
挂接共享内存不检查大小是否不匹配,或者操作前不用信号锁 | |
栈溢出 |
因为在函数局部使用很大的局部变量,导致栈溢出 | |
堆内存泄漏 |
直接对内存指针赋值为空或使用完内存不释放 | |
空指针 |
空指针 |
空指针异常,要严格的控制指针的使用,每个可能出现空指针的地方都要注意检查 |
野指针 |
野指针所指的内存区域已经释放或者不再映射到进程空间,这时对这块指针指向的内存进行操作,就会可能core | |
指针强制转换 |
在使用强制类型转换时要注意,尤其是强制转换一个类型指针的时候 | |
操作 |
更新so时直接覆盖 |
更新so的时候,如果是覆盖so,会导致进程异常core掉,正确做法视代码实现而定 |