【问题标题】:string returned from function refer to local object address函数返回的字符串引用本地对象地址
【发布时间】:2018-01-29 05:55:33
【问题描述】:

我处理过技术债务,发现以下问题,可能是以下 C++ 代码的误报:

string CXXXIXMLImp::GetString(U32 val)
{
    char bufVal[64] = { 0 };
    sprintf_s(bufVal, 63, "%ld", val, 63);
    string strRetVal = bufVal;
    return strRetVal;
}

错误:通过return语句表达式返回局部变量的地址

注意:上面的stringstd::string

我在第 5 行使用字符串分配函数或使用 string::copy 修改了代码。需要相同的建议

【问题讨论】:

  • 你用的是什么编译器?这实际上与静态分析有什么关系吗?
  • stringstd::string 吗?因为如果是,那就是误报。但我有点怀疑这是像typedef char const* string; 这样不愉快的事情。
  • @StoryTeller:Eeeeww!那太可怕了!
  • @MartinBonner - 是的。我支持误报,我真的支持。
  • 这是误报。如果 Klocwork 无法理解 std::string,请放弃它,并获得更好的工具。

标签: c++ string static-analysis


【解决方案1】:

这是误报。如果 Klocwork 无法理解 std::string 获取其构造函数参数的副本,然后正确处理副本,我建议您需要更好的静态分析工具。

不要不要使用字符串分配或string::copy 污染您的代码。 (如果您可以通过将行更改为const string strRetVal = buffer; 来抑制它,那就可以了。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2021-07-14
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多