我应该在使用 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()
比较合适。)
我有这样声明的二维数组:
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()
比较合适。)