我应该在使用 realloc 时在二维数组上使用 "free" 吗?

Should I use "free" on 2D array when I used realloc?

我有这样声明的二维数组:

int **array= NULL;

然后,我在代码的某处添加如下元素:

int* tempArray1D = FuncThatReturnsIntStarArray();
array= (int**)realloc(array, (arraySize+ 1) * sizeof(int*));
*(array+size - 1) = tempArray1D;

如果我想从二维数组中删除一个(最后一个)元素,我应该在一维数组 (int*) 上使用 free() 和 realloc 还是 realloac 来处理所有这些。 例如:

free(*(array+ size- 1));
array= (int**)realloc(array, (size- 1) * sizeof(int*));

或者只是:

array= (int**)realloc(array, (size- 1) * sizeof(int*));

带有 free() 的示例导致了一些问题,我不确定这种避免内存泄漏的方法是否正确,我在代码的其他地方有其他错误,或者这只是一种糟糕的方法。

realloc() 不了解您在 space 中存储的内容。你需要自己照顾他们。

如果 FuncThatReturnsIntStarArray() 分配地址为 return 的内存,并且如果您没有其他机制(如函数 FuncThatFreesAllocatedArray()),您应该释放该内存。

(顺便说一句,FuncThatReturnsIntStarArray() 有点误导,因为 return 不是 int “星星”(俗语:指针)的数组。比如FuncThatReturnsPointerToInts()比较合适。)