char* XX (char* str) { // 用 str CONCAT 现有字符串,并返回给用户 }
我通过以下方式调用该程序:
XX ( strdup("CHCHCH") );
这会导致泄漏而不释放strdup()
生成的内容吗?
free 的结果不太可能XX()
完成这项工作。
(请用 C 和 C++ 告诉我,谢谢!)
char* XX (char* str) { // 用 str CONCAT 现有字符串,并返回给用户 }
我通过以下方式调用该程序:
XX ( strdup("CHCHCH") );
这会导致泄漏而不释放strdup()
生成的内容吗?
free 的结果不太可能XX()
完成这项工作。
(请用 C 和 C++ 告诉我,谢谢!)
除非 XX 函数 free() 是传入的参数,否则这将导致 C 和 C++ 中的内存泄漏。
是的。一些事情free
的结果strdup
。
您可以考虑使用Boehm 的垃圾收集器并使用GC_strdup
&GC_malloc
而不是strdup
& malloc
; 那么你就不用费心打电话了free
是的,这会泄漏。strdup
的结果必须被释放。
另一方面,对于 C++,我建议使用std::string
而不是char*
:
std::string XX( std::string const & in )
{
return in + std::string( "Something to append" );
}
这是实现您正在谈论的内容的一种快速而肮脏的方式,但它非常易读。您可以通过传递对字符串的可变引用进行输出来获得一些速度改进,但除非这是在一个非常紧凑的循环中,否则没有理由这样做,因为它可能会增加复杂性而不会显着提高启动性能。