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

本文详细解释了C语言中free函数的工作原理,特别是在释放内存后指针的状态,并提供了实例说明如何避免野指针的产生,强调了良好的编程习惯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在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 操作。

且记,且记

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值