关闭

内存泄漏和缓冲区溢出

72人阅读 评论(0) 收藏 举报

所谓内存泄漏(memory leak)一般是指堆内存的泄露,它是由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,造成内存保持占用状态,使操作系统不能将内存分配给其他的程序(进程)。并非指内存在物理上的消失,而是程序分配某段内存之后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露啦。


防止内存泄漏:用类来封装指针部分成员变量和动态创建的代码,这样在析构函数处,回收内存。在构造函数处使用异常捕获,以防止部分成员变量已分配动态内存但对象创建失败而引起内存泄漏。

1:在编写代码时使用智能指针smart point,这是一个实现的类似指针功能的类。主要作用是在使用该smart point时,在构造函数中new一块内存,使用结束时,自动调用析构函数,并在其中delete该内存。

2:比较常用的做法是,在编写代码后使用memory leak 检测工具。

3:尽量在构造函数里分配内存,在外部函数分配的内存,不要在调用函数里面释放,而在外部函数内释放。

4:在基类/继承类各管各的内存。

5:避免‘死循环’


缓冲区溢出:向缓冲区填充的数据位数超过了缓冲区自身的容量限制时,发生的缓冲区溢出覆盖在合法的数据。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6805次
    • 积分:491
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:26篇
    • 译文:0篇
    • 评论:0条
    文章存档