pol*_*pts 2 c++ integer-overflow coverity-prevent
我正在为下面的一段代码获得一个覆盖静态检查工具警告.
double value = 0;
std::string origValue("0.50");
value = 0.10 * boost::lexical_cast<double>(origValue);
Run Code Online (Sandbox Code Playgroud)
警告是"溢出的返回值(INTEGER_OVERFLOW)".我无法理解上面的代码有什么问题.当我使用双打时,整数溢出是如何进行的?谢谢.
这个特殊的Coverity静态分析检查器正在寻找两件事:可能在特定值上溢出的操作(它将尝试在解释中给出的示例)以及对可能截断的值的不安全使用.
用户界面显示"事件",解释为什么标记了某些内容.手册描述了每个事件的含义.你正在寻找你的情况这两个事件是"截断"或"溢出"的第一次活动,而"溢出汇"的第二个事件.
代码段显示转换为double的字符串乘以常量,然后分配给另一个double.也许那里没有问题,但是,"溢出的返回值"缺陷标题告诉我们你有第二个事件,你从这个函数返回这个值.如果你从这个函数返回"value"并且返回类型不是double(可能是32位类型)那么你的代码中就有一个潜在的错误(显然不是你要显示的特定值,但是如果字符串可以是一个更大的价值).如果函数返回double,则在分析中它是误报,您可以在UI中将其标记为这样,以便不再向您显示缺陷.
在没有看到更多代码的情况下,很难说是否存在真正的问题,但请记住,静态分析无法知道运行时的值是什么(字符串是否真的是常量还是动态读取?)但这是为什么它会为您提供详细的事件,而不仅仅是一行摘要 - 这样您就可以评估此代码中出现实际问题的可能性.
说了这么多,检查器不应该跟踪浮动因此这里肯定有一个错误.由于我碰巧为他们工作,我已将此作为一个问题提交,但也可以向Coverity支持报告.
归档时间: |
|
查看次数: |
1607 次 |
最近记录: |