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

标签 c arrays pointers

对于即将到来的期中考试,我们的练习题之一是编写一个函数来删除一个二维整数数组并将指针设置为 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/

相关文章:

c - C 中的字符串减速长度

python - 错误 : Setting an array element with a sequence. Python/Numpy

python - 动态大小多维数组

c++ - 在 C++ 的类成员函数中传递当前对象的引用

c - memcpy 和指针。还在工作。为什么?

c# - 使用 C# 调用 C++ 程序集

c - 删除空格后的垃圾输出

JavaScript。一个奇怪的赋值语句

objective-c - 带有 NULL 指针的 CGRectDivide

C - execve() 在命令错误时不返回 -1