簡體   English   中英

是否有必要在對指針到指針數組調用 realloc 以縮小其大小之前釋放子指針?

[英]Is it necessary to free sub-pointer before calling realloc on pointer-to-pointer array to shrink its size?

例如,我有這個 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 沒有析構函數,因此您必須手動釋放已刪除元素指向的所有對象。 否則會出現內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM