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