[英]Does below code have potential memory leak?
Sonarqube 报告以下代码的 memory 泄漏。 如果我们将strdup()
的 output 分配给char * temp
变量并稍后释放temp
变量,则 SQ 不会报告任何潜在的 memory 泄漏。
class A
{
public:
string name;
};
int main()
{
A a;
char * str = "abcdef";
a.name = strdup(str);
return 0;
}
是的,此代码有 memory 泄漏。 strdup()
分配动态 memory 必须是free()
'd,例如:
int main()
{
A a;
char *str = strdup("abcdef");
a.name = str;
free(str);
return 0;
}
但是,在这种情况下没有理由使用strdup()
,因为字符串文字可以直接分配给std::string
:
int main()
{
A a;
a.name = "abcdef";
return 0;
}
char * strdup( const char *str1 );
返回一个指向以 null 结尾的字节字符串的指针,它是 str1 指向的字符串的副本。 返回的指针必须传递给 free 以避免 memory 泄漏。
所以 - 是的,您有 memory 泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.