我写了这个函数:
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
函数内部,我会发生内存泄漏。我该怎么解决这个问题?
答案 0 :(得分:1)
您有几个选择:
params[0]
并在该函数的文档中明确说明。const
移除input_string
并进行相应的工作。如果调用者想要保持一个未更改的副本,则调用者必须在调用该函数之前进行复制。parse_parameters
的额外参数)。你在那里复制字符串。