c - 动态分配的二维数组

标签 c arrays pointers double malloc

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

相关文章:

c - 如何让 cython 变量保持事件状态?

c - Qt有C接口(interface)吗?

c++ - 将私有(private)指针数组初始化为 null

php - 如何使用 foreach 循环在 PHP 和 HTML 数组中回显名字、姓氏和电子邮件地址对象

c++ - 如何在不解析的情况下将重载函数指针作为参数传递 (C++03)

c - 指针在c中不能正常工作?

C 编程错误,打印链表,在运行时执行代码崩溃

c - 查找服务器的IP和端口

c - 斐波那契错误输出? (C)

javascript - 删除用户输入时出现问题