C 语言中 free函数 使用的注意事项

     在C 语言中 在时候用完malloc()等动态分配的函数之后要 释放该段内存 就要用到 free()函数了,但是该函数有一个特点,就是用完之后,它并不会把指针指向空,只是告诉OS 被以前 malloc 函数 征用的 那段内存 可以再次被 其它 进程 使用了,但是被 free的指针仍指向 该段内存,这个时候这个指针通常被称为 野指针 。 所以要特别注意。

 

举例如下 :

 


假设

 char *p=malloc(sizeof(char));   之后p的值是地址0x00000001
*p = 'a';                              //在地址0x00000001中写入'a';
free(p);                               //将不再能通过p来访问地址0x00000001,如果通过p来访问地址0x00000001的话既视为非法操作
*p = 80;                            //这里通过p往地址0x00000001中写入80,如上所述,已经free过,这么做是非法的


你 可以想象这样一种情况,在执行free(p)之后,地址为0x00000001的内存就自由了,系统或者程序在其他地方征用了(譬如使用malloc)地 址0x00000001作为一个存储备份值的地方,而且往里面写入了一个值,假设是200,但是你下面又通过*p = 80;改变了地址0x00000001中的值,本来备份的是200,你非法地改成了80,那么目前拥有地址0x00000001使用权的系统或者程序就会 读取到错误的备份值,本来是200的,现在变成了80,从而会出错。

因此有个代码规则是在free(p)之后将p = NULL;

即  free(p);

     p = NULL;

在代码中是要 一块出现   的,就是为了刻意的防止进行 *p 操作。

且记,且记

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值