在C中释放动态分配的内存

adr*_*min 1 c malloc memory-leaks

回到几年前我写的一些C代码,我觉得它应该是泄漏记忆,但我找不到它的迹象,我想检查我的假设.

我有这样的结构:

struct BitArray {
   ....
   char *bits;
   ....
}
Run Code Online (Sandbox Code Playgroud)

bits 动态分配如下:

bArray->bits = (char *)calloc(1, 1 << shiftNumber);
Run Code Online (Sandbox Code Playgroud)

free-ed像这样:

free(nextBA->bits);
Run Code Online (Sandbox Code Playgroud)

但不应把漏内存-也就是说,它只会free在最初的charbits点?free以这种方式分配内存的正确方法是什么?

use*_*738 6

不,它不会泄漏内存.事实上,这一切都很好.

您正在传递之前由内存管理功能传递的内容(calloc此处).所以没关系.

标准7.22.3.1开始注意

free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义.

那么这肯定不是这样的.所以没关系.

它只会释放位指向的第一个char?

不会free分配的块.

你做的方式是正确的方式.

  • 用C++编写的内容与它有什么关系?如果以这种方式在C++中使用`calloc()`和`free()`,则应用相同的答案. (2认同)