4

下面的代码抛出Unvalidated integer value is received from std::stoi klocwork 错误。如果 *it 包含无效范围或非整数值,则将执行 catch 块。但是我们在第二个 for 循环中遇到 klocwork 错误,因为循环边界中使用了受污染的数据“值”。如何解决这个问题?

#include <vector>
#include <string>
#include <iostream>

int main()
{
    int value = 0;
    std::vector<std::string> test;
    test.push_back("1");
    test.push_back("2");

    for (std::vector<std::string>::iterator it = test.begin(); it != test.end(); ++it)
    {
        try
        {
            value = std::stoi(*it);
        }
        catch (...)
        {
            return -1;
        }

        for (int i = 0; i < value; i++)
        {
            //...
            //...
        }

    }

    return 0;
}
4

1 回答 1

1

我用 Klocwork 2020.2 版尝试了相同的代码,但在代码中没有发现任何问题。可能,这种误报可能已在最新版本的 Klocwork 中得到解决。

请尝试使用 Klocwork 最新版本测试代码。

于 2020-07-06T10:39:48.667 回答