2015-03-08 103 views
0

這裏只是一個疑問。我有2個指針的指針.. ** M1,**平方米和m2被初始化爲: -複製指針值

m2 =(int **) calloc(5, sizeof(int *)); 
for(int i=0; i<5; i++) 
m2[i] = (int *)calloc(8, sizeof(int)); 

和指針具有值..就像二維數組..在每個位置。

可我就是不喜歡 -

m1 = m2; 
free(m2); // then use m1 as m2 ?? 

真的很抱歉,如果它的一個簡單的問題..和請什麼正確的方法複製到M2和M1 M2自由。 謝謝。

+0

關於「)釋放calloc(」的調用1)C,不投返回值2)經常檢查返回值,以確保手術很成功(!= NULL) – user3629249 2015-03-11 15:18:20

+0

感謝通知:)&當然我知道它.. – user4647543 2015-03-13 17:42:35

回答

0

不,m1 = m2只會讓m1指向與m2相同的內存。它不會複製數組。

當你然後去釋放指向m1m2的內存時,兩個指針都將失效。

btw free(m2)只取消分配數組int*。您需要解除分配在m2int陣列,以及:

for(int i=0; i<5; i++) 
    free(m2[i]); 
free(m2); 
+0

謝謝。所以我需要分別爲m1分配並分配每個元素?? – user4647543 2015-03-08 20:10:31

+0

是的。您也可以使用['memcpy'](http://www.cplusplus.com/reference/cstring/memcpy/)來代替手動分配。 – emlai 2015-03-08 20:15:23

+0

我很好。我會研究一下。另一個小疑問。如果我將指針的地址傳遞給一個函數,並將該內存分配給該函數中的指針,那麼在函數從堆棧中消失後它是否仍然存在?我可以使用調用函數中分配的內存嗎? – user4647543 2015-03-08 22:03:01