2012-08-07 94 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