free和delete如何对付指针?

程序员都知道它们是用来释放申请的内存的,但是却很少有人注意到指针本身并没有发生什么变化。各位可以在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,这样这个指针就没意义,我们也不会因为以后误用他而产生什么后果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值