gpt4 book ai didi

c - strdup() 导致内存泄漏?

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

我实现了一个返回字符串的函数。它接受一个整数作为参数 (age),并返回一个格式化的字符串。

除了我有一些疯狂的内存泄漏之外,一切都运行良好。我知道 strdup() 是造成这种情况的原因,但我试图研究一些修复方法但无济于事。

我的代码是:

const char * returnName(int age) {

char string[30];

sprintf( string, "You are %d years old", age);

return strdup(string);
}

Valgrind 的输出是:

==15414== LEAK SUMMARY:
==15414== definitely lost: 6,192 bytes in 516 blocks
==15414== indirectly lost: 0 bytes in 0 blocks
==15414== possibly lost: 0 bytes in 0 blocks
==15414== still reachable: 0 bytes in 0 blocks
==15414== suppressed: 0 bytes in 0 blocks

非常感谢解决此内存泄漏问题的任何帮助。

最佳答案

strdup() 本质上等同于

char* dup = malloc(strlen(original) + 1);
strcpy(dup, original);

因此您需要记住在使用完字符串后调用free()

const char* name = returnName(20);
/* do stuff with name */
free((void*)name);

如果您不调用 free(),当然 valgrind 会报告泄漏。

关于c - strdup() 导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224761/

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