gpt4 book ai didi

c - 如何释放返回的 malloced 字符串?

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

我有以下两个功能。函数 get_string_data(line) malloc 一个字符串并返回它。后来我这样使用它:

char *get_string_data(char *) {
char *sec_tok, *result;
Split *split;
split = split_string(line, ' ');

sec_tok = split -> tail;

if (starts_with_char(sec_tok, '\"') && ends_with_char(sec_tok, '\"')) {
result = (char *) malloc(strlen(sec_tok) + 1);
strcpy(result, sec_tok);
free(split);
result++;
*(result + (strlen(result) - 1)) = '\0';
return result;
}
free(split);
return NULL;
}

void handle_string_instr(char *line) {
char* data = get_string_data(line);

...a few lines later, after I used the data...

free(data);
... end of the world happens here...
}

现在尝试释放字符串时,一切都崩溃了(程序接收到信号 SIGABRT,已中止。)。为什么会发生这种情况,释放内存的正确方法是什么?

最佳答案

这是问题代码

result = (char *) malloc(strlen(sec_tok) + 1);
...
result++;
...
return result;

此时 get_string_data 方法不再返回指向已分配内存的指针。它而是将指针返回到已分配的内存中。您只能传递指向分配给 free 的内存的指针。在这种情况下你不会,这就是它崩溃的原因

还有一个更简单的 null 终止字符串的方法如下

size_t length = strlen(sec_tok);
result = (char*)malloc(length + 1);
...
result[length] = '\0';

关于c - 如何释放返回的 malloced 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17957944/

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