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

时间:2018-01-01 19:11:39

标签: c memory-leaks malloc

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

我有这样的结构:

struct BitArray {
   ....
   char *bits;
   ....
}

bits动态分配如下:

bArray->bits = (char *)calloc(1, 1 << shiftNumber);

free - 像这样:

free(nextBA->bits);

但是不应该泄漏内存 - 也就是free指向char的第一个bits只会freesomelist = [5.000007,5.00099,5.0000075,5.0000075,5.0000075,5.0000099,5.00099,5.0000080,5.0000081,5.00099,5.0000080,5.0000096,5.0000087,5.008,5.00099,5.00000009] values=[5.00000009, 5.000007, 5.0000075] track={} for j,i in enumerate(somelist): if i in values: if i not in track: track[i]=1 else: track[i]+=1 print(max(list(map(lambda x:(track[x],x),track)))) 以这种方式分配内存的正确方法是什么?

1 个答案:

答案 0 :(得分:6)

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

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

standard 7.22.3.1谨慎

  

free函数导致ptr指向的空间   取消分配,即可用于进一步分配。如果是ptr   空指针,不会发生任何操作。 否则,如果参数没有   匹配之前由内存管理函数 返回的指针,或   如果通过调用free或realloc释放空间,则   行为未定义。

那么这是 当然 并非如此。所以没关系。

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

不会free分配的块。

你所采取的方式是正确的方法。