0

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

例如float ** someArray

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

6 回答 6

4

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

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

// and free the container array only now

free(someArray);

P.s.:不要强制转换 malloc 的返回值。

于 2012-08-07T22:05:16.927 回答
1

倒退:

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

free(somearray);
于 2012-08-07T22:10:33.997 回答
1

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

于 2012-08-07T22:08:42.370 回答
0

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

换句话说,如果您:

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

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

于 2012-08-07T22:04:15.837 回答
0

只是一个简单的 1-free()调用:

free(someArray);
于 2012-08-07T22:04:21.240 回答
-1
for(int i = 0; i < numberOfDimensions; i++)
{
    free(somearray[i]);
    somearray[i] = NULL;
}

free(somearray);
somearray=NULL;

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

于 2016-11-07T13:31:08.317 回答