Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1031643
  • 博文数量: 146
  • 博客积分: 3444
  • 博客等级: 中校
  • 技术积分: 1602
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-21 15:18
文章分类

全部博文(146)

文章存档

2014年(9)

2013年(3)

2012年(6)

2011年(44)

2010年(38)

2009年(46)

分类: C/C++

2011-09-09 10:43:38

  在C语言中使用指针,一要防止内存泄漏,二要防止指针误操作已经不属于它引用的内存
一、如果指针是指向一个变量,那么只管用,不会有任何问题。
如:
int a=5;
int *p=&a;
.......
return *p;
  没有任何问题,函数返回后,a,p都将被销毁,p占用的内存及p引用(指向)的内存都将被释放。
  二、如果指针指向的内存是通过malloc函数动态分配而来的,那么在使用后要马上释放,否则就会引起内存泄漏
如:
int *p=NULL;
p=(int *)malloc(sizeof(int));
................//其它使用指针的语句
free(p);
p=NULL;
return 0;
  在上面例子中,在函数返后回,p立即会被销毁,p占用的内存会放释放,如果我们在程序中没有使用free函数对p指向的内存进行释放,p指向(引用)的内存(通过free函数申请到的内存)不会被自动释放,而且因为已经没有指针再记住他的地址,这段内存就成了游离在外无法再被使用的幽灵,这就是曲型的内存泄漏
  为了防止出现这种情况,在使用malloc函数进行动态内存分配,并使用完毕后,要马上使用free函数对使用完的动态内存进行释放,释放后为了防止指针p误操作内存还要使用p=NULL。
在一个函数中malloc,free,=NULL要成对出现,对某段动态内存的申请 ,使用,回收也要尽量在一个函数体内完成。
阅读(3543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~