想用释放一段内存 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。