初探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;

}


 

 

 

 

 

 

 

 

 

 

初探C++内存泄漏学习笔记,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。