分类: 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,这样这个指针就没意义,我们也不会因为以后误用他而产生什么后果!