在C中释放动态分配的内存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C中释放动态分配的内存相关的知识,希望对你有一定的参考价值。
回到几年前我写的一些C代码,我觉得它应该是在泄漏记忆,但我找不到它的迹象,我想检查一下我的假设。
我有这样的结构:
struct BitArray {
....
char *bits;
....
}
bits
动态分配如下:
bArray->bits = (char *)calloc(1, 1 << shiftNumber);
和free
-ed像这样:
free(nextBA->bits);
但不应该泄漏记忆 - 即它只会free
char
指向的第一个bits
?以这种方式分配内存的free
的正确方法是什么?
答案
不,它不会泄漏内存。事实上,这一切都很好。
您正在传递之前由内存管理功能传递的内容(calloc
此处)。所以没关系。
来自standard 7.22.3.1的谨慎
free函数导致ptr指向的空间被释放,即可用于进一步分配。如果ptr是空指针,则不执行任何操作。否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义。
那么这肯定不是这样的。所以没关系。
it will only free the very first char that bits points to?
不,它将free
分配的块。
你做的方式是正确的方式。
以上是关于在C中释放动态分配的内存的主要内容,如果未能解决你的问题,请参考以下文章