【问题标题】:Will the following use of strdup() cause a memory leak in C ?下面使用 strdup() 会导致 C 中的内存泄漏吗?
【发布时间】:2011-11-11 09:05:06
【问题描述】:

char* XX (char* str) { // 用 str 连接一个现有的字符串,并返回给用户 }

我通过以下方式调用这个程序:

XX ( strdup("CHCHCH") );

这会导致泄漏而不释放strdup() 生成的内容吗?

XX() 的释放结果不太可能完成这项工作。

(请用 C 和 C++ 告诉我,谢谢!)

【问题讨论】:

    标签: string memory-management concatenation strcat strdup


    【解决方案1】:

    除非 XX 函数 free() 的参数传入,否则这将导致 C 和 C++ 中的内存泄漏。

    【讨论】:

      【解决方案2】:

      是的。 free 的结果必须是 strdup 的结果。

      您可以考虑使用Boehm's garbage collector 并使用GC_strdup & GC_malloc 而不是strdup & malloc;那你就不用费心打电话给free

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2016-01-18
          • 2010-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-03
          • 2018-08-17
          • 1970-01-01
          • 2010-11-18
          相关资源
          最近更新 更多