float **tree0;
tree0 = (float**)malloc(255 * sizeof(float*));
for( i = 0; i < 255; i++)
tree0[i] = (float*)malloc(M * sizeof(float));
for(i = 0; i < 255; i++)
for( k = 0; k < M; k++)
tree0[i][k] = 2;
我应该像这样释放它吗
free(tree0);
我在某处遇到了堆损坏错误,并认为这可能是问题......
答案 0 :(得分:4)
您需要拨打free()
的次数与呼叫malloc()
以及malloc()
返回的相同地址一样。所以,你只需按照分配方式进行:
for( i = 0; i < 255; i++)
free(tree0[i])
free(tree0);
答案 1 :(得分:1)
对于每个malloc()
,必须有free()
。您需要以与malloc()
循环相同的方式进行迭代,但之后调用free(tree0[i])
然后调用free(tree0)
。
请注意,从malloc()
转换返回值是不必要的。
答案 2 :(得分:0)
每个malloc
需要一个free
,因此您需要一个类似的for
循环来释放所有内部malloc。