2012-08-07 93 views
0

什么是释放浮动**的正确方法如下。正确的方法来释放双指针

例如float ** someArray

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

男人,你收到6个答案后,你改变了你的问题......这会造成一些麻烦 – sidyll 2012-08-07 22:06:34

+0

我知道,人们回答这么快。 – jarryd 2012-08-07 22:07:18

+0

@ Helium3你应该接受一个答案 – SheetJS 2013-10-18 08:52:06

回答

4

如果你malloc分配新一轮的内存并将其分配给原始数组中每个浮点指针,那么你应该让他们自由以及事先:

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

我改变了我的问题,当你回答时,对不起。 – jarryd 2012-08-07 22:07:59

+2

我在改变问题时改变了我的答案以反映新问题。抱歉。 :P – 2012-08-07 22:09:30

0

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

换句话说,如果你:

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

那么你需要重新走它,你之前做的FreeS免费的someArray。

+0

当你回答时,我改变了我的问题,对不起。 – jarryd 2012-08-07 22:07:53

+0

@Nirk在告诉你如何去做之后,给了我一个完整的答案。 – 2012-08-07 22:58:51

0

只是一个简单的1 free()电话:

free(someArray); 
+0

我改变了我的问题,当你回答时,对不起。 – jarryd 2012-08-07 22:07:56

1

我相信你预期会释放的元素,然后释放阵列。

1

转到向后:

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

free(somearray); 
+0

一个平等而相反的反应,明白了。 ;) – jarryd 2012-08-07 22:12:43

+0

@ Helium3该方法推广到任意维数 – SheetJS 2012-08-07 22:14:35

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

free(somearray); 
somearray=NULL; 

(的someArray [I] = NULL)这条线将打破每个数组元素的链接和最后(的someArray = NULL)将断开链接到阵列。这两行将释放动态内存阵列和操作系统分配这个释放内存到其他一些进程

+0

可以请你改进帖子吗?而不是只提供示例代码,你可以尝试解释编写代码的原因吗? – 2016-11-07 13:32:44