首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在strsep()之后释放内存?

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

Stack Overflow用户
提问于 2015-09-16 13:18:37
回答 1查看 1.8K关注 0票数 1

我写了这个函数:

代码语言:javascript
复制
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;
}

我就是这样用的:

代码语言:javascript
复制
char *parameters[3];
parse_parameters("some;delimited;string", 3, parameters);

根据我在parameters数组中的理解,我指向已经释放的内存。但是如果我在parse_parameters函数中没有空闲,我就会有内存泄漏。我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-16 13:34:27

你有几个选择:

  1. 让调用方释放params[0],并在函数的文档中清楚地说明这一点。
  2. const中删除input_string并完成相应的工作。如果调用方希望保持不变的副本,则调用方必须在调用函数之前复制该副本。
  3. 调用方必须提供至少与temp_string一样大的缓冲区作为工作区域(parse_parameters的额外参数)。你把绳子复制到那里。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32609770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档