2012-04-26 93 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