2012-04-26 95 views
2

我解決一些簡單的指針運動,當我遇到下面的例子來了:自由2D陣列在C

void deallocate2D(int** array, int nrows) {  
/* deallocate each row */ 
int i; 
for(i = 0; i < nrows; i++) { 
     free(array[i]); 
} 

/* deallocate array of pointers */ 
free(array);  
} 

陣列處於主要爲INT定義** ARRAY1;

這是一個正確的解除分配2d數組內存的方法,還是應該在函數中傳遞一個int ***數組? 有沒有辦法檢查內存是否已成功釋放?

+1

對於詞彙表,您在這裏處理的不是二維數組,而是指針數組。 – 2012-04-26 20:33:52

回答

2

是的,這是正確的。 int***只有當你打算改變指針的值時才需要,你不需要。

確實存在可以檢查你的內存分配/釋放的工具 - Valgrind應該能夠做到這一點。

+0

謝謝你的答案。我還有一個問題。如果我想用void函數爲2d數組分配內存,這是否正確? void allocate2D(int *** Array,int rows){array = malloc(rows * sizeof(int *)); \t int i;對於(i = 0; i zSt 2012-04-26 20:37:51

+0

@CpZNick這似乎是正確的,雖然你可能也想指定列。 – Pubby 2012-04-26 20:41:18