0

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

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

XX ( strdup("CHCHCH") );

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

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

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

4

3 回答 3

3

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

于 2011-11-11T09:09:45.217 回答
1

是的。一些事情free的结果strdup

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

于 2011-11-11T09:09:13.113 回答
1

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

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

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

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

于 2011-11-11T09:44:10.987 回答