exponenta event banner

Массив с частичным доступом

Массив частично прочитан или написан до конца области

Описание

Этот дефект возникает, когда массив частично считывается или записывается до конца области массива. Для массивов, локальных для функции, окончание области действия происходит по завершении функции.

Риск

Массив с частичным доступом часто указывает на отсутствие в кодировании. Например, при сортировке массива с использованием цикла используется ряд итераций цикла, так что один элемент массива никогда не считывается. Реализация может привести к тому, что массив не будет полностью отсортирован.

Зафиксировать

Исправление зависит от первопричины дефекта. Например, если основной причиной является цикл с неправильным числом итераций, измените ограничение цикла или добавьте шаг после цикла, чтобы получить доступ к непрочитанным или неписанным элементам.

См. примеры исправлений ниже.

Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Примеры

развернуть все

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);

 }

Множество tab считывается только частично перед окончанием функции Calc_Sum. При вычислении 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