解释内存泄露

 

void   f1(void)  
  {  
        int   *   p;    
        p   =   new   int;  
  }  
   
  执行了F1函数后,p所分配到的内存地址就丢了。找不回那个int内存了,所以这里的内存泄露了!一般多是指内存分配未回收。Top

 

打个比方:内存就象一个旅馆,旅馆的每个房子都有编号并记录在案  
  客人来了,管理者根据这些编号的记录给客人分配房间,现在某个编号不小心弄丢了,不再被记录在案了,那么这个房间对于管理者来说就相当于不存在了,我们说这就发生了“房间泄漏”  
   
  再看J_John同志的例子,当调用函数f1()时,已分配了一块内存,并给了编号p,  
  现在函数调用结束了,这个编号却没有传出去,于是就发生内存泄漏  

1.用   malloc   分配了,但没有用   free   释放。  
  2.用   new   分配了,但没有用   delete   删除。  
  3.用   GlobalAlloc   分配,但没有用   GlobalFree   释放。  
  4.用   new   []   分配的数组,没有用   delete[]   删除,而是用   delete   删除。  
  如:  
      struct   A   {  
            int   num;  
      }  
   
      struct   A*   pa;  
      pa   =   new   A[10];  
      delete   pa;   //应该用delete[]   pa;

 

自己申请的内存一定要记着释放,否则就会造成内存泄漏

 

用多少放多少

 

当你申请了内存块时有忘记了指向内存的指针

 

在程序中若有一个指针指向了一块内存区域,后来由于某种原因(通常为程序员没有将其释放),而内存没有被释放,这时对于程序来说,那块内存区域已经不可用了。楼上那位朋友旅馆的比喻很形象。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值