在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中释放动态分配的内存的主要内容,如果未能解决你的问题,请参考以下文章

在C语言进行编程中,为啥要释放旧内存?

动态内存分配

C++程序的内存分区,为什么要使用动态内存,动态内存的分配使用释放

c语言分配内存方式都有哪些

解析PHP中的内存管理,PHP动态分配和释放内存

C语言中的动态内存分配的用法举例