free的使用

本文纠正了关于释放内存的一些常见误解,特别是对于使用C语言时分配的char数组。文章解释了为何简单地使用free函数来释放含有多个空字符的内存块会导致问题,并提供了正确的释放内存的方法。

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

想用释放一段内存 char *buf(10000个字节)

能简单的free(buf)吗?显然不能!!! 这个一开始我犯这样的错了。内存中可能有很多的空字符('/0').

free会释放传入参数的类型大小,sizeof,当然如果是字符串,会计算字符串的长度,以'/0'结束。

 

那么如何释放呢?

for(i=0;i<len;i++)

{

      if(buf[i])//这个地方要判断,有可能是空字符

           free(buf[i]);

}

如果不是用buf[i],而是用buf呢??

会不会有问题呢?该内存中间有空字符存在时,会free一段一段的,那么后面的计算会……

 

纠正:

 以上代码不正确!!应该:

     free(buf);

     buf=NULL;

 

原因呢,给buf分配空间时已经记录了分配的信息,即管理信息(包括长度,这个是操作系统相关的知识了)了。这样做就足够了,详细可以看后面发表的那篇文章《malloc()和free()

 

另外,如果想要free掉内存里面的某一部分内容呢?比如,ResponseBuf很大,只存4K,那么我怎么存这4K呢?肯定不能简单的移动指针到4K的位置,然后free,这样必定出错(原因查看free源码就知道了)。可以另外在分配一个空间,拷贝这要保存的4K,然后再free掉原来的ResponseBuf。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值