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);
我在某处堆损坏错误,并认为这可能是问题所在......
您需要调用free()
的次数与malloc()
调用的次数相同,并且使用的地址与malloc()
返回的地址相同。因此,您只需按照分配的方式进行操作:
for( i = 0; i < 255; i++)
free(tree0[i])
free(tree0);
对于每个malloc()
都必须有一个free()
。您需要以与malloc()
循环相同的方式进行迭代,但调用free(tree0[i])
然后free(tree0)
。
请注意,从 malloc()
强制转换返回值是不必要的。
每个malloc
都需要一个free
,所以你需要一个类似的for
循环来释放所有内部的mallocs。