c - 如何在 strsep() 之后释放内存?

标签 c memory-management

我写了这个函数:

char** parse_parameters(const char* input_string, int num_params, char** params) {
    char *temp_string = strdup(input_string);
    char **pp;
    for (pp = params; (*pp = strsep(&temp_string, ";")) != NULL;) {
        if (**pp == '\0')
            break;
        pp++;
        if (pp >= &params[num_params])
            break;
    }
    free(temp_string);
    return params;
}

我是这样使用的:

char *parameters[3];
parse_parameters("some;delimited;string", 3, parameters);

根据我对 parameters 数组的理解,我指向的是已经释放的内存。但是,如果我不在 parse_parameters 函数内部释放内存,就会发生内存泄漏。我应该如何解决这个问题?

最佳答案

你有几个选择:

  1. 让调用者释放 params[0] 并在函数的文档中明确说明这一点。
  2. input_string 中删除 const 并就地完成工作。如果调用者想要保留未更改的副本,则调用者必须在调用函数之前制作一份副本。
  3. 调用者必须提供一个至少与 temp_string 一样大的缓冲区用作工作区(parse_parameters 的额外参数)。您将字符串复制到那里。

关于c - 如何在 strsep() 之后释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609770/

相关文章:

python - 如何使用 ZODB 进行适当的内存管理?

C - 程序只用 fprintf 写一行

c - libuv:如何在出现错误时优雅地退出应用程序?

c - 尝试运行时 C 中的段错误

c - 在 C 中用变量初始化数组

c - linux中模块的调试

objective-c - AutoreleasePool 没有捕获断点,没有警告,Instruments Leaks 中没有报告

C 所有值都随指针改变

c++ - 在 iOS 应用程序中使用 c++(内存管理)

javascript - jQuery 顺序元素、删除、分离、克隆、追加内存泄漏