char **loadValues()
{
char **toReturn;
int i;
toReturn = malloc(5 * sizeof(char *));
for (i = 0; i < 5; i++)
{
toReturn[i] = malloc(25); //Change the size as per your need
strncpy(toReturn[i], "string", i + 1); //Something to copy
}
return toReturn;
}
我复制了上面的部分代码。其中,“toReturn”变量是使用malloc
初始化的。难道我们不必“释放”这个“toReturn”变量吗?
我们在C中返回这些变量的时候不是必须释放它们吗?我仍然找不到明确的答案,也找不到返回时释放它的方法。谁能给我解释一下?
最佳答案
我假设您的问题是:调用 loadValues
并接收它返回的指针的函数如何释放加载的值。
如果我们将 loadValues
保持原样,最好的解决方案是创建另一个名为 freeValues
的函数,并在我们处理完值后调用它:
void freeValues(char **values)
{
for (i = 0; i < 5; i++)
{
free(values[i]);
}
free(values);
}
然后你可以在你的主程序中做这样的事情:
char **values = loadValues();
// ... use values for something
freeValues(values);
另一种选择是使用对 malloc
的单个调用来分配 toReturn,在这种情况下,只需调用 free
即可释放它。
关于c - 在 c 中使用 malloc 时的自由变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66835565/