Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2970102
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类: LINUX

2011-05-05 15:01:32

程序员都知道它们是用来释放申请的内存的,但是却很少有人注意到指针本身并没有发生什么变化。各位可以在VC中使用单步跟踪一下,你们会惊奇地发现当指针p被调用了free后它的地址值并没有改变,只是该地址对应的内存中原来有意义的值变成了垃圾,“p”却还是指向的这块内存。记住,一定要第一时间将p的值设为NULL,否则会让别人以为p是一个有意义的指针而误使用它(当别人使用该指针时会判断指针的值是否为NULL,如果不为NULL就会以为它有意义)。

char *p = (char *)malloc(100);

strcpy(p, “hello”);

free(p); // the address of “p” is not changed.

….

if (NULL != p) //it will return TRUE

strcpy(p, “world”); //Wrong!!!

我的总结是释放指针时,指针本身并没有消失,指针不在指向以前所指的内存块.当然以前的内存块中的值也并不会消失,它会随着下一次被分配是被赋予的其他值所覆盖.因此,此时的指针在不再指向以前内存块的前提下,让他去指向NULL,这样这个指针就没意义,我们也不会因为以后误用他而产生什么后果!

阅读(1283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~