微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我使用 realloc 时,我应该在二维数组上使用“free”吗?

如何解决当我使用 realloc 时,我应该在二维数组上使用“free”吗?

我有如下声明的二维数组:

int **array= NULL;

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

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

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

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

或者只是:

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

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

解决方法

while 不知道您在空间中存储的东西。你需要自己照顾它们。

如果 realloc() 分配了它返回的地址的内存,并且如果您没有其他机制(如函数 FuncThatReturnsIntStarArray()),您应该释放该内存。

(顺便说一句,FuncThatFreesAllocatedArray() 有点误导,因为它不返回 FuncThatReturnsIntStarArray() “星星”(俗语:指针)的数组。像 int 这样的东西更多适当的。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。