正确的方法来释放双指针

时间:2012-08-07 22:00:28

标签: c memory-management malloc free

如下所示,释放浮动的正确方法是什么。

e.g。 float ** someArray

for(int i = 0; i < numberOfDimensions; i++)
    {
        somearray[i] = (float *) malloc(numberOfDimensions * sizeof(float));
    }

6 个答案:

答案 0 :(得分:4)

如果你有malloc'ed另一轮内存并将其分配给原始数组中的每个浮点指针,那么你应该事先释放它们:

int i;
for (i = 0; i < numberOfDimensions; i++)
    free(someArray[i]);

// and free the container array only now

free(someArray);

P上。 s。:don't cast the return value of malloc.

答案 1 :(得分:1)

我相信你应该释放元素,然后释放数组。

答案 2 :(得分:1)

向后退:

for(int i = 0; i < numberOfDimensions; i++)
{
    free(somearray[i]);
}

free(somearray);

答案 3 :(得分:0)

嗯,在这种情况下你只需要释放(someArray)。现在,如果你使用malloc更多内存并将其添加到someArray,那么你需要遍历该数组并释放每个对象。

换句话说,如果你:

for(int i=0; i< whatever; ++i) {
  someArray[i] = malloc(...
}

然后你需要再次走它并在释放someArray之前释放它。

答案 4 :(得分:0)

只需简单的1 - free()电话:

free(someArray);

答案 5 :(得分:-1)

for(int i = 0; i < numberOfDimensions; i++)
{
    free(somearray[i]);
    somearray[i] = NULL;
}

free(somearray);
somearray=NULL;

(somearray [i] = NULL)此行将断开每个数组元素的链接,最后(somearray = NULL)将断开与数组的链接。这两行将释放动态内存数组,操作系统将此释放的内存分配给其他进程