回到几年前我写的一些C代码,我觉得它应该是泄漏记忆,但我找不到它的迹象,我想检查我的假设。
我有这样的结构:
struct BitArray {
....
char *bits;
....
}
bits
动态分配如下:
bArray->bits = (char *)calloc(1, 1 << shiftNumber);
free
- 像这样:
free(nextBA->bits);
但是不应该泄漏内存 - 也就是free
指向char
的第一个bits
只会free
? somelist = [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))))
以这种方式分配内存的正确方法是什么?
答案 0 :(得分:6)
不,它不会泄漏内存。事实上,这一切都很好。
您正在传递之前由内存管理功能传递的内容(此处为calloc
)。所以没关系。
free函数导致ptr指向的空间 取消分配,即可用于进一步分配。如果是ptr 空指针,不会发生任何操作。 否则,如果参数没有 匹配之前由内存管理函数 返回的指针,或 如果通过调用free或realloc释放空间,则 行为未定义。
那么这是 当然 并非如此。所以没关系。
不会free
分配的块。
你所采取的方式是正确的方法。