对于即将到来的期中考试,我们的练习题之一是编写一个函数来删除一个二维整数数组并将指针设置为 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
。
现在你做的与你做的完全相反:
首先删除所有
int
的。然后执行
int*
。
这样排序的原因是如果你先删除 int*
-s 那么就会有内存泄漏。您不会在失去对它的引用的同时释放用于存储 int
的内存空间。这就是取消分配内存的相反顺序的原因。
关于c - 删除二维整数数组,在 C 中将指针设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393226/