gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:10 25 4
gpt4 key购买 nike

我写了这个函数:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com