Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1166240
  • 博文数量: 173
  • 博客积分: 4048
  • 博客等级:
  • 技术积分: 2679
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-12 18:53
文章分类

全部博文(173)

文章存档

2018年(1)

2016年(1)

2013年(1)

2012年(118)

2011年(52)

分类: C/C++

2012-04-27 10:12:33

一定要保证你的 malloc 和 free 成对出现,如果你写出这样的一段程序:

点击(此处)折叠或打开

  1. char * function(void)
  2. {
  3.    char *p;
  4.    p = (char *)malloc(...);
  5.    if(p==NULL)
  6.    ...;
  7.    ... /* 一系列针对 p 的操作 */
  8.    return p;


在某处调用 function(),用完 function 中动态申请的内存后将其 free,如下:

点击(此处)折叠或打开

  1. char *q = function();
  2. ...
  3. free(q)
上述代码明显是不合理的,因为违反了 malloc 和 free 成对出现的原则,即"谁申请,就由谁释放"原则。不满足这个
原则,会导致代码的耦合度增大,因为用户在调用 function 函数时需要知道其内部细节!
正确的做法是在调用处申请内存,并传入 function 函数,如下:

点击(此处)折叠或打开

  1. char *p=malloc(...);
  2. if(p==NULL)
  3. ...;
  4. function(p);
  5. ...
  6. free(p);
  7. p=NULL;
而函数 function 则接收参数 p,如下:
void function(char *p)
{
... /* 一系列针对 p 的操作 */
}

阅读(1172) | 评论(0) | 转发(0) |
0

上一篇:malloc原理

下一篇:assert用法总结

给主人留下些什么吧!~~