数组访问越界
数组访问时数组索引超出范围
描述
当数组访问时数组索引超出范围 [0...array_size-1] 时,会发生此缺陷。
风险
访问数组范围之外的数组是未定义的行为。您可能会读取一个不可预测的值,或尝试访问一个不允许访问的位置,从而遇到段错误。
修复
修复方法取决于缺陷的根本原因。例如,您在循环中访问了一个数组,并发生了以下情况之一:
循环的上限过大。
您使用了与循环索引相同的数组索引,而不是比循环索引小 1 的数组索引。
要解决这个问题,您必须修改循环边界或数组索引。
数组索引可能超过数组边界的原因还有一个,即先将有符号整数转换为无符号整数。转换可能会导致索引值循环,最终导致数组索引超出数组边界。
通常,结果详细信息(或在 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 |
命令行语法:OUT_BOUND_ARRAY |
| 影响:高 |
版本历史记录
在 R2013b 中推出