有谁知道第三行“Free(array)”是做什么的?这里的array只是数组首元素的地址(换句话说,是指向int *数组首元素的指针对吧)?为什么我们需要第三行来释放二维数组的“列”?我基本上记住/理解 a 是一个指针,表示 a 持有 ____ 的地址。这句话对吗?
例如:int **a;整数 * b;诠释 c; b = &c = 4; 一个=&b;这是正确的吗?谢谢!!!
另外,一般来说,双指针基本上是动态分配的数组,对吧?
“最后,当需要释放这些动态分配的多维“数组”之一时,我们必须记住释放我们分配的每个内存块。(只是释放顶级指针, array,不会削减它;如果我们这样做,所有二级指针将丢失但不会被释放,并且会浪费内存。)代码可能如下所示:“http://www.eskimo.com/~scs/cclass/int/sx9b.html
for(i = 0; i < nrows; i++)
free(array[i]);
free(array);
最佳答案
Why do we need the third line to free the "columns" of the 2D array?
解除分配的数量应与分配的数量相匹配。
如果您查看文档开头的代码:
int **array;
array = malloc(nrows * sizeof(int *));
for(i = 0; i < nrows; i++) {
array[i] = malloc(ncolumns * sizeof(int));
}
您会看到数组本身有一个 malloc()
,每一行都有一个 malloc()
。
释放this的代码基本上是反过来的。
Also, in general, double pointers are basically dynamically allocated arrays right?
不一定。动态分配的数组是双指针的一种用途,但远非唯一用途。
关于c - 动态分配的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921644/