例如,我有以下C代码:
int len = 100;
int i;
// arr is pointer-to-pointer 2d array of char
char **arr = malloc(len * sizeof(char*));
for (i = 0; i < len; i++)
{
// Allocate the sub-pointer
arr[i] = malloc(len * sizeof(char));
...
}
...
// Is this part necessary?
for (i = 0; i < len; i++)
{
// Freeing the sub-pointer
free(arr[i]);
}
// Shrink the arr's size from 100 to 50
char** temp = realloc(arr, 50 * sizeof(char*));
...
在为
arr
缩小大小(从100到50)进行重新分配之前,是否有必要释放arr
的子指针?for (i = 0; i < len; i++)
{
free(arr[i]);
}
最佳答案
是的,如果重新分配的数组的大小小于原始大小,则必须释放所有指针。例如
for (i = 50; i < len; i++)
{
free(arr[i]);
}
char** temp = realloc(arr, 50 * sizeof(char*));
C没有析构函数,因此您必须手动释放所删除元素指向的所有对象。否则会出现内存泄漏。
关于c - 在指针对指针数组上调用realloc以缩小其大小之前,是否有必要释放子指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31089640/