gpt4 book ai didi

c - 如何释放将返回的 char*?

转载 作者:行者123 更新时间:2023-12-04 00:38:00 25 4
gpt4 key购买 nike

假设我有以下功能:

char* fakeTrim(char* input) {
char* temp = malloc(strlen(input));
int count = 0;
for(int i = 0; i < strlen(input); i++) {
if(input[i] != ' ')
temp[count++] = input[i];
}
temp[count] = '\0';
return temp;
}

温度是否会导致任何内存泄漏?如果是这样,是否可以在我们返回 temp 之前释放它?

谢谢!

最佳答案

不,您当然不能释放属于您要返回的数据的内存。实际上,在这样的实用函数中分配内存极有可能导致内存泄漏;由于调用者看不到函数体,她很容易忘记释放它。这个问题其实有一个标准的解决方案,就是让调用者自己分配内存:

void fakeTrim(const char* input, char* temp) {
int count = 0;
for(int i = 0; i < strlen(input); i++) {
if(input[i] != ' ')
temp[count++] = input[i];
}
temp[count] = '\0';
}

现在内存泄漏仍然是可能的,但这不是“你的错”——调用者应该知道释放他分配的内存。请注意,在签名中添加 const 使得输入参数和输出参数一目了然。

编辑:这是一个用例:

const char* input = "Hello world";
char* temp = malloc(strlen(input)+1);
fakeTrim(input, temp);
// ... do something with temp
free(temp);

关于c - 如何释放将返回的 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22703395/

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