【问题标题】: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++ 中的内存泄漏。
【解决方案3】:
是的,这会泄漏。 strdup 的结果必须被释放。
另一方面,对于 C++,我建议使用 std::string 而不是 char*:
std::string XX( std::string const & in )
{
return in + std::string( "Something to append" );
}
这是实现您所说的内容的一种快速而肮脏的方式,但它的可读性很强。您可以通过传递对字符串的可变引用来提高速度,但除非这是在一个非常紧凑的循环中,否则没有理由这样做,因为它可能会增加复杂性而不会显着提高启动性能。