繁体   English   中英

下面的代码是否有潜在的 memory 泄漏?

[英]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;
} 

cppreference 的 strdup

char * strdup( const char *str1 ); 返回一个指向以 null 结尾的字节字符串的指针,它是 str1 指向的字符串的副本。 返回的指针必须传递给 free 以避免 memory 泄漏。

所以 - 是的,您有 memory 泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM