gpt4 book ai didi

c - 删除二维整数数组,在 C 中将指针设置为空

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:57 24 4
gpt4 key购买 nike

对于即将到来的期中考试,我们的练习题之一是编写一个函数来删除一个二维整数数组并将指针设置为 NULL。我以为我知道该怎么做,但类其他一些人说了一些让我很困惑的东西(他们说我们应该使用三重指针以便我们可以修改数组,但数组本身基本上不是一个指针吗?那么 **array 不等同于三重指针吗?)。我的函数正确吗?

void cleanUp(int** array, int numRows, int numCols) {
for (int i = 0; i < numRows; ++i) {
free((*array)[i]);
}
free(*array);
*array = NULL;
}

最佳答案

您将首先删除所有单独的行(包含 int),然后 int* 的 block 将被删除。

void cleanUp(int** array, int numRows, int numCols) {
for (int i = 0; i < numRows; ++i) {
free(array[i]); // deleting the individual arrays
}
free(array); // deleting array of `int*`
}

在交错数组的情况下,free-ing 将与您分配完整交错数组的方式相反。

首先,您为 numRow int* 分配空间。然后为每个 int* 分配 numCol int

现在你做的与你做的完全相反:

  1. 首先删除所有int的。

  2. 然后执行int*

这样排序的原因是如果你先删除 int*-s 那么就会有内存泄漏。您不会在失去对它的引用的同时释放用于存储 int 的内存空间。这就是取消分配内存的相反顺序的原因。

关于c - 删除二维整数数组,在 C 中将指针设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393226/

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