下面的代码段抛出从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;
}
答案 0 :(得分:1)
我用Klocwork 2020.2版尝试了相同的代码,但在代码中未发现任何问题。可能,这种误报可能已在最新版本的Klocwork中解决。
请务必尝试使用Klocwork最新版本测试代码。