以下使用 strdup() 会导致 C 中的内存泄漏吗?
字符* XX (字符* 字符串) { // 将现有字符串与 str 连接起来,然后返回给用户
我通过以下方式调用此程序:
XX ( strdup("CHCHCH") );
这会导致泄漏,同时不释放 strdup()
生成的内容吗?
free XX()
的结果不太可能完成这项工作。
(请用 C 和 C++ 告诉我,谢谢!)
char* XX (char* str)
{
// CONCAT an existing string with str , and return to user
}
And i call this program by:
XX ( strdup("CHCHCH") );
Will this cause a leak while not releasing what strdup()
generates ?
It's unlikely that free the result of XX()
will do the job.
(Please let me know both in C and C++ , thanks !)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
除非 XX 函数 free() 是传入的参数,否则这将导致 C 和 C++ 中的内存泄漏。
Unless the XX function free()'s the argument passed in, yes this will cause a memory leak in both C and C++.
是的。必须有东西
释放
strdup
的结果。您可以考虑使用 Boehm 的垃圾收集器 并使用
GC_strdup
&GC_malloc
而不是strdup
&malloc
;那么你就不需要费心打电话free
Yes. Something has to
free
the result ofstrdup
.You could consider using Boehm's garbage collector and use
GC_strdup
&GC_malloc
instead ofstrdup
&malloc
; then you don't need to bother about callingfree
是的,这会泄漏。
strdup
的结果必须被释放。另一方面,对于 C++,我建议使用
std::string
而不是char*
:这是实现您所讨论的内容的一种快速而肮脏的方法,但它的可读性很强。您可以通过传递对输出字符串的可变引用来提高速度,但除非这是在非常紧密的循环中,否则没有理由这样做,因为它可能会增加复杂性,而不会显着提高性能。
Yes this will leak.
strdup
's results must be freed.For C++, on the other hand, I recommend using
std::string
rather thanchar*
:This is a quick-and dirty way to implement what you're talking about, but it is very readable. You can obtain some speed improvement by passing in a mutable reference to a string for output, but unless this is in a very tight loop, there is little reason to do so, as it would likely add increased complication without booting performance significantly.