我写了这个函数:
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 >= ¶ms[num_params])
break;
}
free(temp_string);
return params;
}
我是这样使用的:
char *parameters[3];
parse_parameters("some;delimited;string", 3, parameters);
根据我对 parameters
数组的理解,我指向的是已经释放的内存。但是,如果我不在 parse_parameters
函数内部释放内存,就会发生内存泄漏。我应该如何解决这个问题?
最佳答案
你有几个选择:
- 让调用者释放
params[0]
并在函数的文档中明确说明这一点。 - 从
input_string
中删除const
并就地完成工作。如果调用者想要保留未更改的副本,则调用者必须在调用函数之前制作一份副本。 - 调用者必须提供一个至少与 temp_string 一样大的缓冲区用作工作区(
parse_parameters
的额外参数)。您将字符串复制到那里。
关于c - 如何在 strsep() 之后释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609770/