Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86310
  • 博文数量: 18
  • 博客积分: 510
  • 博客等级: 中士
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-27 20:37
文章分类

全部博文(18)

文章存档

2011年(18)

分类: C/C++

2011-03-03 16:48:27

写C和C++程序大部分时间是在操作内存,这也是C和C++比java、C#等强大的原因。天下没有免费的午餐,有所获必有所失,一不小心就会埋下隐患,导致程序运行很长一段时间后突然崩溃。鉴于此,对造成程序core的原因做阿了个总结:

类别

子类别

描叙

变量

数组越界

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

字符串异常结束

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

局部变量过大

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

全局变量线程不安全

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

函数

函数参数传替异常

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

函数过度递归调用

过渡递归调用导致栈溢出

字符串安全函数

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

内存

内存分配异常

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

写保护内存

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

内存回收异常

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

共享内存异常

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

栈溢出

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

堆内存泄漏

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

空指针

空指针

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

野指针

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

指针强制转换

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

操作

更新so时直接覆盖

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

 

阅读(2626) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux下安装Erlang

给主人留下些什么吧!~~