【发布时间】:2021-07-14 09:23:33
【问题描述】:
我有这样声明的二维数组:
int **array= NULL;
然后,我在代码的某处添加如下元素:
int* tempArray1D = FuncThatReturnsIntStarArray();
array= (int**)realloc(array, (arraySize+ 1) * sizeof(int*));
*(array+size - 1) = tempArray1D;
如果我想从 2D 数组中删除一个(最后一个)元素,我应该在一维数组 (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() 的示例会导致一些问题,我不确定这种避免内存泄漏的方法是否正确,并且我在代码中的其他地方还有其他错误,或者这只是一种不好的方法。
【问题讨论】:
-
如果函数
FuncThatReturnsIntStarArray使用malloc或其他动态分配,那么如果您不再需要分配的内存,您可能必须使用free。一般来说,建议先将realloc的结果存储在一个临时变量中并检查返回码,例如tmp = realloc(array, (size- 1) * sizeof(int*)); if(tmp == NULL) { /* handle error */ } else { array = tmp; } -
我推荐使用下标运算符
array[index]而不是*(array+index)。
标签: c memory-leaks free realloc