主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

未完整访问的数组

在范围结束之前部分读取或写入数组

描述

当数组在数组范围结束之前被部分读取或写入时,会发生此缺陷。对于函数中的局部数组,当函数结束时,其作用域也结束。

风险

部分访问的数组通常表明编码中存在遗漏。例如,当使用循环对数组进行排序时,您使用了多次循环迭代,因此一个数组元素从未被读取。实现可能会导致数组未完全排序。

修复

修复方法取决于缺陷的根本原因。例如,如果根本原因是循环的迭代次数不正确,请更改循环边界或在循环后添加一个步骤以访问未读或未写的元素。

请参阅以下修复示例。

如果您不想修复问题,请在结果或代码中添加注释,以免再次被审查。请参阅:

示例

全部展开

int Calc_Sum(void) 
{
  int tab[5]={0,1,2,3,4},sum=0;  
  /* Defect: tab[4] is not read */ 
  
  for (int i=0; i<4;i++) sum+=tab[i];
  
  return(sum);

 }

在函数 Calc_Sum 结束之前,数组 tab 只被部分读取。在计算 sum 时,tab[4] 不被包含在内。

更正 - 访问每个数组元素

一种可能的更正方法是读取数组 tab 中的每个元素。

int Calc_Sum(void) 
{
  int tab[5]={0,1,2,3,4},sum=0;   
  
  /* Fix: Include tab[4] in calculating sum */
  for (int i=0; i<5;i++) sum+=tab[i]; 
  
  return(sum);

 }

结果信息

组:数据流
语言:C | C++
默认值:手写代码时为启动,生成代码时为关闭
命令行语法:PARTIALLY_ACCESSED_ARRAY
影响

版本历史记录

在 R2013b 中推出