gpt4 book ai didi

c - 如何释放在函数中分配但地址由该函数返回的内存?

转载 作者:行者123 更新时间:2023-11-30 15:31:06 25 4
gpt4 key购买 nike

我想知道如何释放动态分配的内存。我知道程序终止后内存会自动释放,但是如果这个函数用作守护程序的一部分怎么办?我相信我会发生内存泄漏,不是吗?

这是代码。这是一个简单的字符串反转函数。

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

char *my_string_rev(char *string)
{
// allocate memory to return the new string
char *out = malloc (sizeof (char));

assert(out);


// do things here
// ..
// ..

return out;
}

int main()
{

char *str = my_string_rev("true");

free(str);

return 0;
}

我尝试在 main 中调用 free(str) 发现它不起作用。我是否应该担心释放 my_string_rev 返回的内存?

上面的 my_string_rev 调用确实有效。当字符串长度超过 4 个字符时。因此,当我使用“stackoverflow.com a b”调用该函数时,出现以下错误:

Error in `./main': free(): invalid next size (fast): 0x088d2008 *

这是因为 malloc 分配吗?我应该将字符串的长度传递给 malloc 吗?

最佳答案

char *out = malloc(strlen(string) + 1);

+ 1 因为 strlen 不计算 '\0' 字符。

关于c - 如何释放在函数中分配但地址由该函数返回的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107793/

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