是否有必要在指针到指针数组上调用realloc之前释放子指针以缩小其大小?

时间:2015-06-27 14:07:56

标签: c arrays pointers malloc

例如,我有这个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]);
}

1 个答案:

答案 0 :(得分:3)

是的,如果重新分配的数组的大小小于原始大小,则必须释放所有指针。例如

for (i = 50; i < len; i++)
{
    free(arr[i]);
}

char** temp = realloc(arr, 50 * sizeof(char*));

C没有析构函数,因此您可以手动释放已删除元素指向的所有对象。否则会有内存泄漏。