valgrind:使用来自 std::string::asassign 的单位化值

valgrind: Use of unitialized value from std::string::assign

本文关键字:asassign 单位 string std valgrind      更新时间:2023-10-16

valgrind 报告以下代码的错误

void test(const std::vector<string> &strvec) {
  string val;
  if (strvec.size() > 0) {
    val = strvec.front(); // use of uninitialized value of size 8
  }
}

抱歉,我无法发布完整的代码,因为它取决于许多其他事情。这只是一个简单的代码截图。

由于 valgrind 没有报告任何关于 size() 检查的错误,所以我认为我应该能够得到它的前面。但我不明白为什么它抱怨访问未初始化的值。

我发现了问题。

就 https://blog.mozilla.org/nnethercote/2009/02/27/eliminating-undefined-values-with-valgrind-the-easy-way/

实际上,当任何操作依赖于由访问未定义的变量引起的早期跳转时,它会为这些操作报告相同的错误。

就我而言,此错误取决于远离此处的 if-check,但代码路径确实取决于该检查。

瓦尔格林德可以选择报告"根本原因"吗?