exponenta event banner

Partially accessed array

Массив частично читается или записывается до окончания возможностей

Описание

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

Риск

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

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

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

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

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

Примеры

расширить все

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++
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: PARTIALLY_ACCESSED_ARRAY
Влияние: Низкое
Введенный в R2013b