从std :: stoi收到未经验证的整数值

时间:2018-02-06 13:14:03

标签: c++ klocwork

下面的代码段抛出从std :: stoi klocwork错误收到未经验证的整数值。如果*它包含无效范围或非整数值,则执行catch块。但是我们在第二个for循环中得到klocwork错误,因为在循环边界中使用了污染数据'value'。如何解决这个问题?

#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;
}

1 个答案:

答案 0 :(得分:1)

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

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