【发布时间】:2016-01-18 09:51:29
【问题描述】:
我已经实现了一个返回字符串的函数。它接受一个整数作为参数(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的任何文档吗? -
代码是否最终
free()是returnName()返回的指针?如果没有,则有泄漏。 -
你需要
freestrdup的结果在某些时候,这反过来意味着你需要将返回类型更改为只是(非const)char *。 -
我如何在该变量所在的函数之外释放一个局部变量?回答这个问题 - 由于上述担忧,我没有释放 strdup。
标签: c memory-leaks strdup