关于free()函数的一些说明

          free()函数在头文件malloc.h中有相关的声明。其原型是:void free(void *ptr);其作用是用来释放malloc向系统申请的内存。

文章主要对free()作用于指针后的一些后续性的一些说明。希望能帮助到大家了解free()更深层次的一些问题!


这里我提出一个观点是:用free()函数来释放了malloc()申请的内存之后,只是其内容被清空了并且程序不再拥有这段内存的使用权,但是其指针还是指向这块内存!

我用一个程序片段来说明:

void
test( void )
{
     int *ptr  = malloc( sizeof( int ) );
     *ptr = 100000;
     printf(" ptr的地址是0x%x  内容是%d\n",ptr,*ptr);
     free(ptr);
     printf("释放之后ptr的地址是0x%x\n",ptr);
     //这里不能读取ptr的内容因为已经被释放     
}


      通过这段测试代码可以看出即使用free()来释放ptr之后ptr的指向依然是没有改变的,就是它指向那块内存就是     

向那块内存。只不过那块内存的使用权已经不归你程序所有而已。看到这里我想读者现在就能够明白为什么free()

之后还要把指针指向NULL;其作用就是为了防止野指针的出现。野指针就是说指向了一块并不属于你的内存的指

针。

所以这里也可以看出free()的一些内在的缺陷。它并不能完全的防止错误的读操作。

措施是每次我们用完free()之后都要将ptr在指向NULL;或者你可以重写一个free()。然后将它在放回gcc的include这个文件里面。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值