Coverity中的溢流返回值警告
Overflowed return value warning in Coverity
我收到下面一段代码的coverity静态检查器工具警告。
double value = 0;
std::string origValue("0.50");
value = 0.10 * boost::lexical_cast<double>(origValue);
警告为"溢流返回值(INTEGER_OVERFLOW)"。我无法理解上面的代码出了什么问题。当我使用双打时,整数溢出是如何发挥作用的?谢谢
这个特殊的Coverity静态分析检查器正在寻找两件事:可能在特定值上溢出的操作(它将在解释中给出示例)和潜在截断值的不安全使用。
UI向您显示"事件",这些事件解释了标记某些内容的原因。手册描述了每个事件的含义。在您的案例中,您要查找的两个事件是第一个事件的"截断"或"溢出",以及第二个事件的的"溢出接收器"。
代码片段显示,转换为double的字符串乘以一个常量,然后分配给另一个double。也许并没有问题,然而,缺陷的"溢出返回值"标题告诉我们,您有第二个事件,您从这个函数返回这个值。如果您从这个函数返回"value",并且返回类型不是双精度的(可能是32位类型吗),那么您的代码中就有一个潜在的错误(显然没有显示特定的值,但如果字符串可以是更大的值)。如果函数返回double,那么它在分析中是假阳性,您可以在UI中将其标记为假阳性,这样缺陷就不会再次显示给您。
如果看不到更多的代码,很难说是否存在真正的问题,但请记住,静态分析无法知道运行时值是什么(字符串真的是常量还是动态读取的?)但这就是为什么它会为您提供详细的事件,而不仅仅是一行摘要,这样您就可以评估此代码中出现真正问题的可能性。
说了这么多,检查器不应该跟踪浮动,所以这里的Coverity肯定有一个错误。由于我碰巧为他们工作,我已经将此作为一个问题提交,但也可以随时向Coverity支持部门报告。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 警告 C6031 返回值在宏扩展中被忽略
- 如何获取有关 Visual Studio 代码分析中未经检查的函数返回值的警告
- "警告:并非所有控制路径都返回值"是什么意思?(C++)
- 获取“将返回值分配给新变量”的警告和输出是内存地址
- 接收并非所有控制路径返回值的警告
- 获取错误:警告C4715::并非所有控制路径都返回值,但不确定原因
- 警告 C4715:'bankingMenu':并非所有控制路径都返回值 (C++)
- FlexeLint/PC lint警告说,不考虑std::string::append的返回值
- 警告 C4715:"运算符==":并非所有控制路径都返回值
- 警告:忽略"int scanf(const char*, ...)"的返回值,使用属性 warn_unused_result [-Wunused-result] 声明
- Coverity中的溢流返回值警告
- 警告C4715:并非所有控制路径都返回值c++
- 给新变量赋返回值警告在c++的delete语句中出现
- 不是所有控制路径都返回值?警告
- 警告 C4715:'d2cs_conn_set_addr':并非所有控制路径都返回值
- 在c++中强制调用者捕获返回值并产生编译错误或警告的编译器标志