gpt4 book ai didi

c - 如果在循环中多次调用 malloc() 和 realloc() 则多次 free()ing

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:46 25 4
gpt4 key购买 nike

假设我有一段代码包含这个

s = strtok_r(buffer, " \t\n", &saveptr);
do
{
inStr = (char*)malloc(strlen(s)+1);
(void) strncpy(inStr, s, strlen(s)+1);

inputStrings=(char**)realloc(inputStrings,(nElems+1)*sizeof(char*));
inputStrings[nElems] = inStr;
nElems++;
}
while((s = strtok_r(NULL, " \t\n", &saveptr))!=NULL);

我是否必须多次 free() inStr 和 inputStrings(尤其是 for 循环中最多 nElems 的 inputStrings)或每次一次?到目前为止,我还没有找到任何直接解决这个问题的文章,所以我认为释放一次就足够了。如果此问题缺少任何信息,请通知我。谢谢。

最佳答案

你只需要free(inputStrings)一次。所有 realloc() 调用都会释放旧 block 并分配一个新 block 。

对于从 0nElems-1< 的 i 的每个值,您确实需要free(inputStrings[i])/。分配的所有内容最终都需要释放。

完成数组后,您应该:

for (i = 0; i < nElems; i++) {
free(inputStrings[i]);
}
free(inputStrings);

关于c - 如果在循环中多次调用 malloc() 和 realloc() 则多次 free()ing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com