c - 在 c 中使用 malloc 时的自由变量

标签 c malloc free

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/

相关文章:

c - 当我使用 free() 时,c 中的程序遇到无限循环

c - 为什么当我将堆对象传递给函数时不需要释放它们?

c - fprintf() 问题 utf-8 linux

C - 调用函数时遇到问题

c - 使用 fscanf 读取可变数量的整数

c++ - 如何使用自定义 malloc 重载 "operator new"以使其调用构造函数?

将一维字符串数组转换为c中的二维字符串数组

c - POSIX 计时器 : Signal Handler for Timer freezes

c - 我究竟做错了什么?如何将 read 函数中分配的内存传递给 disp 函数?

c - 如何在不知道它是在堆栈还是堆上分配的函数内释放 C 中的数组?