首页 > 代码库 > 初探C++内存泄漏学习笔记
初探C++内存泄漏学习笔记
为什么要避免内存泄露呢?
分配一块内存,但是忘了释放它,这是一种很严重的错误。这样的内存将等到程序结束之后才会被释放。
如果程序运行的时间很长,并且在不断申请内存而没有释放内存,迟早会把内存消耗殆尽,导致后面无法申请内存甚
至系统奔溃。
常见的内存泄漏的几种情况
new语句所返回的地址是访问这个内存块的唯一线索,同时也是delete语句把这个内存块还给系统的唯一线索。
int *x;x = new int[100]; //x是唯一线索delete [] x;x=NULL;
如果这块内存的地址(保存在x里)丢失了,就会发生内存泄漏问题。
例子1
int *x;x = new int[100]; x = new int[200]; delete [] x;x=NULL;//此时,第一块内存的地址被第二块内存的地址覆盖了,于是无法释放第一块内存,造成内存泄漏。
例子2
void foo ( ){ Class * x; x = new Class();}/*new出来的内存是在堆内,没有作用域限制,但是保存它地址的指针是有作用域限制的。当函数结束后,x不存在,导致内存泄露*/
如何避免内存泄漏
如何避免例2的内存泄漏呢?
方法1
在函数结束前,插入delete语句。
void foo ( ){ Class * x; x = new Class(); delete x; x = NULL; return;}
方法2
如果还想继续使用这块内存,将内存地址返回。
Class * foo ( ){ Class * x; x = new Class(); return x;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。