如何在c中使用后释放双指针?

时间:2012-08-25 06:15:03

标签: c malloc free

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);

我在某处遇到了堆损坏错误,并认为这可能是问题......

3 个答案:

答案 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。