设为首页 加入收藏

TOP

21.3.3 释放堆内存
2013-10-07 01:15:47 来源: 作者: 【 】 浏览:75
Tags:21.3.3 释放 内存

21.3.3  释放堆内存

由于系统不负责堆内存块的释放,它的释放必须由程序本身来控制。如果没有正常释放堆内存将会引起内存泄露。与malloc()函数相对应的释放函数为:

  1. void free(void *pointer); 

该函数释放pointer指针所指向的内存。与new对应的释放函数为:

  1. delete [] pointer; 

该语句释放pointer指针指向的一块内存。如果pointer不是数组,则不需要加"[]"。此前的示例中对堆内存的使用都是不安全的,因为都缺少了释放操作,下面就对21.3.2节的示例加入释放操作,修改如下。

【示例21-10】 带有释放操作的动态数组的实现。

  1. int main()  
  2. {  
  3.     int size;  
  4.     cout << "请输入数组的维数: ";  
  5.     cin>>size;  
  6.     int *p =0;  
  7.     if (size%2==0)  
  8.         p=new int[size];                        //用new在堆上申请size个int字
    //节大小的内存单元
     
  9.     else 
  10.             p=(int*)malloc(size*sizeof(int));   //用malloc()在堆上申请size个
    //字节的空间
     
  11.     for(int i=0; i<size; i++)  
  12.     {  
  13.         p[i] = i * 10;                          //以数组方式对每个内存存储单元进
    //行初始化  
     
  14.     }  
  15.     for(int i=0; I < size; i++)  
  16.     {  
  17.         cout << "第" << i << "个数组元素:";  
  18.         cout <<  *p++ ;                     //以指针方式将内存存储单元中的值输出  
  19.         cout << "\n";   
  20.     }      
  21.     if (size%2==0)  
  22.         delete [] p;                        //与new对应的释放操作  
  23.     else 
  24.         free(p);                            //与malloc()对应的释放操作  
  25.     p=NULL;  
  26.     return 0;  
分析:该示例与21.3.2节的区别在于加入了最后的释放操作。如果不加该操作,由new和malloc()申请的内存就没有得到释放。因此程序运行结束后,这些内存就没有被系统收回,导致产生内存泄露,而且堆内存会越来越少。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇21.6 常见问题及解答 下一篇21.3.2 使用堆内存

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: