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

时间:2015-09-16 13:18:38

标签: 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 个答案:

答案 0 :(得分:1)

您有几个选择:

  1. 将其留给调用者以释放params[0]并在该函数的文档中明确说明。
  2. const移除input_string并进行相应的工作。如果调用者想要保持一个未更改的副本,则调用者必须在调用该函数之前进行复制。
  3. 调用者必须提供一个至少与temp_string一样大的缓冲区,以用作工作区(parse_parameters的额外参数)。你在那里复制字符串。