gpt4 book ai didi

c - 动态分配的二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:42 26 4
gpt4 key购买 nike

有谁知道第三行“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com