无符号整数转换溢出
在不同无符号整数类型之间转换时发生溢出
描述
此缺陷在将无符号整数转换为较小的无符号整数类型时发生。如果变量没有足够的字节来表示原始常量,则转换会发生溢出。
不同浮点数类型的确切存储分配取决于您的处理器。请参阅目标处理器类型 (-target)。
风险
整数转换溢出会导致未定义行为。
修复
修复方法取决于缺陷的根本原因。通常,结果详细信息(或在 Polyspace as You Code 中显示的源代码提示)会显示导致缺陷的一系列事件。您可以在序列中的任何事件上实施此修复。如果结果详细信息未显示此事件历史记录,您可以使用源代码中的右键点击选项搜索与缺陷相关的变量的先前引用,并找到相关事件。另请参阅解释 Polyspace 桌面端用户界面中的 Bug Finder 结果或解释 Polyspace Access Web 界面中的 Bug Finder 结果 (Polyspace Access)。
您可以通过以下方式修复此缺陷:
使用更大的数据类型来表示转换结果,以便能够容纳所有值。
检查导致溢出的值,并执行适当的错误处理。
一般来说,应避免将数据类型转换为更小的整数类型。
请参阅以下修复示例。
如果您不想修复问题,请在结果或代码中添加注释,以免再次被审查。请参阅:
通过 Bug 修复或申述在 Polyspace 用户界面中处理结果 在 Polyspace 用户界面中审查结果时。
通过 Bug 修复或申述在 Polyspace Access 中处理结果 (Polyspace Access)(如果您在 Web 浏览器中审查结果)。
为代码添加注解并隐藏已知或可接受的结果 在 IDE 中审查结果时。
扩展检查项
当输入值未知并且只有一部分输入会导致问题时,默认的 Bug Finder 分析可能不会引发此缺陷。要检查由特定系统输入值引起的缺陷,请运行更严格的 Bug Finder 分析。请参阅Extend Bug Finder Checkers to Find Defects from Specific System Input Values。
示例
结果信息
| 组:数值 |
| 语言:C | C++ |
| 默认值:On |
命令行语法:UINT_CONV_OVFL |
| 影响:低 |
版本历史记录
在 R2013b 中推出