数组访问越界
在数组访问期间数组索引超出边界
描述
当数组访问期间数组索引超出范围 [0...array_size-1] 时,会出现此缺陷。
风险
访问数组边界之外的位置属于未定义行为。这意味着您可能会读取到不可预测的值,或者尝试访问不允许的位置,从而导致分段故障。
修复
修复方法取决于缺陷的根本原因。例如,您在循环内访问数组时发生了以下情况之一:
循环的上界太大。
使用的数组索引与循环索引相同,而非比循环索引小一。
要修复此问题,您必须修改循环边界或数组索引。
可能导致数组索引超出数组边界的另一个原因是先前将有符号整数转换为了无符号整数。这种转换可能导致索引值循环,最终使数组索引超出数组边界。
通常,结果详细信息(或 Polyspace® as You Code™ 中的源代码工具提示)会显示导致该缺陷的一系列事件。您可以在该系列中的任何事件上实施修复。如果结果详细信息未显示此事件历史记录,您可以通过在源代码中使用右键点击选项来搜索缺陷相关变量的先前引用,并查找相关事件。另请参阅Interpret Polyspace Bug Finder Results in Polyspace Platform User Interface或解释 Polyspace Access Web 界面中的 Bug Finder 结果 (Polyspace Access)。
请参阅下面的修复示例。
如果您不想修复该问题,可以在结果或代码中添加注释,以避免再次被审查。请参阅:
Address Polyspace Results Through Bug Fixes or Justifications(如果在 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
|
| 影响:高 |
PQL 名称:std.defects.OUT_BOUND_ARRAY
|
版本历史记录
在 R2013b 中推出
另请参阅
主题
- Interpret Polyspace Bug Finder Results in Polyspace Platform User Interface
- 解释 Polyspace Access Web 界面中的 Bug Finder 结果 (Polyspace Access)
- Address Polyspace Results Through Bug Fixes or Justifications
- 通过 Bug 修复或申述在 Polyspace Access 中处理结果 (Polyspace Access)
- Extend Bug Finder Checkers to Find Defects from Specific System Input Values