以下使用 strdup() 会导致 C 中的内存泄漏吗?

发布于 2024-12-15 02:34:14 字数 274 浏览 4 评论 0原文

字符* 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野心澎湃 2024-12-22 02:34:14

除非 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++.

椒妓 2024-12-22 02:34:14

是的。必须有东西释放 strdup 的结果。

您可以考虑使用 Boehm 的垃圾收集器 并使用 GC_strdup & GC_malloc 而不是 strdup & malloc;那么你就不需要费心打电话free

Yes. Something has to free the result of strdup.

You could consider using Boehm's garbage collector and use GC_strdup & GC_malloc instead of strdup & malloc; then you don't need to bother about calling free

潇烟暮雨 2024-12-22 02:34:14

是的,这会泄漏。 strdup 的结果必须被释放。

另一方面,对于 C++,我建议使用 std::string 而不是 char*

std::string XX( std::string const & in )
{
   return in + std::string( "Something to append" );
}

这是实现您所讨论的内容的一种快速而肮脏的方法,但它的可读性很强。您可以通过传递对输出字符串的可变引用来提高速度,但除非这是在非常紧密的循环中,否则没有理由这样做,因为它可能会增加复杂性,而不会显着提高性能。

Yes this will leak. strdup's results must be freed.

For C++, on the other hand, I recommend using std::string rather than char*:

std::string XX( std::string const & in )
{
   return in + std::string( "Something to append" );
}

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文