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

时间:2011-11-11 09:05:07

标签: string memory-management concatenation strcat strdup

char * XX(char * str)       {         //使用str CONCAT现有字符串,并返回给用户       }

我称之为:

XX ( strdup("CHCHCH") );

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

是。某些内容必须free strdup的结果。

您可以考虑使用Boehm's garbage collector并使用GC_strdup& GC_malloc代替strdup& malloc;那么你不需要打扰调用free

答案 2 :(得分:1)

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

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

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

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