Выполните один или несколько из этих шагов, пока не определите исправление для проверки индекса массива Out of bounds. Существует несколько способов исправления чека. Описание проверки и примеры кода см. в разделе Out of bounds array index.
Иногда, особенно для оранжевой проверки, можно определить, что проверка представляет собой не реальную ошибку, а предположение Polyspace ®, которое не соответствует вашему коду. Если для смягчения предположения можно использовать опцию анализа, повторно запустите проверку с помощью этой опции. В противном случае в результат или код можно добавить комментарий и обоснование.
Общий рабочий процесс, применяемый ко всем проверкам, см. в разделе Интерпретация результатов проверки кода в пользовательском интерфейсе Polyspace Desktop.
Установите курсор на [ символ.

Получите из подсказки следующую информацию:
Размер массива. Допустимый диапазон для индекса массива - от 0 до (размер массива - 1).
Фактический диапазон для индекса массива
В предыдущем примере размер массива равен 10. Поэтому допустимый диапазон для индекса массива составляет от 0 до 9. Однако фактический диапазон от 0 до 10.
Возможное исправление: Чтобы избежать выхода за пределы индекса массива, обращайтесь к массиву только в том случае, если индекс находится в диапазоне от 0 до (размер массива - 1).
#define SIZE 100 int arr[SIZE]; . . if(i<SIZE) val = arr[i] else /*Error handling */
Если требуется узнать или изменить размер массива, щелкните правой кнопкой мыши переменную массива и выберите «Перейти к определению», если параметр существует. В противном случае выполните трассировку потока данных, начиная с переменной индекса массива. Укажите точку, в которой можно ограничить индексную переменную.
Чтобы отследить поток данных, установите флажок и запишите информацию на панели Сведения о результате (Result Details).
Если на панели Сведения о результате (Result Details) отображается последовательность инструкций, которые приводят к проверке, выберите каждую инструкцию.
Если на панели Сведения о результате (Result Details) отображается номер строки вероятной причины проверки, щелкните правой кнопкой мыши панель Источник (Source). Выберите «Перейти к строке».
В противном случае:
Поиск предыдущих экземпляров переменной индекса массива.
Просмотрите эти экземпляры. Найдите экземпляр, в котором переменная индекса массива ограничена (размер массива - 1).
Возможное исправление: Если экземпляр, на который наложена зависимость индексной переменной, не найден, укажите ограничение для переменной. Например:
if(index<SIZE) read(array[index]);
Определите, применяется ли ограничение к экземпляру, в котором произошла ошибка индекса массива Out of bounds.
Например, можно ограничить индексную переменную в for шлейф с использованием for(index=0; index<SIZE; index++). Однако доступ к массиву осуществляется вне цикла, где ограничение не применяется.
Возможное исправление: узнайте, почему ограничение не применяется. Проверьте, нужно ли снова ограничивать индексную переменную.
Если переменная индекса получена из другой переменной, выполните трассировку потока данных для второй переменной. Определите, была ли ограничена эта вторая переменная (размер массива - 1).
В зависимости от переменной используйте следующие сочетания клавиш навигации для поиска предыдущих экземпляров. В интерфейсе пользователя Polyspace можно выполнить только следующие действия.
| Переменная | Поиск предыдущих экземпляров переменной |
|---|---|
Локальная переменная | Используйте один из следующих методов.
|
Глобальная переменная Щелкните правой кнопкой мыши переменную. Если отображается опция Показать в представлении доступа к переменной, переменная является глобальной переменной. |
|
Возвращаемое значение функции
ret=func(); |
|
Можно также определить, связаны ли переменные в какой-либо операции с какой-либо предыдущей операцией. См. раздел Поиск связей между переменными в коде.
Найдите общие причины проверки индекса массива Out of bounds.
Проверьте, начинается ли переменная индекса массива с 0.
В условии, ограничивающем переменную индекса массива, проверьте, используется ли <= когда вы намеревались использовать <.
Если проверка происходит в или сразу после for или while loop, определите необходимость уменьшения количества запусков цикла.
Если вы используете sizeof функция для ограничения массива, проверьте, разделяется ли sizeof(array) около sizeof(array[0]) для получения размера массива.
sizeof(array) возвращает размер массива в байтах.
Проверьте, можно ли отследить оранжевый чек по предположению Polyspace, которое встречается ранее в коде. Если предположение не соответствует действительности в вашем случае, добавьте комментарий или обоснование в результат или код. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
Например, можно ограничить индекс массива с помощью функции, определение которой не указано. Затем:
Polyspace не может определить, что переменная индекса массива ограничена.
При использовании этой переменной в качестве индекса массива может возникнуть ошибка индекса массива вне границ.
Если известно, что переменная ограничена размером массива, добавьте комментарий и обоснование, описывающие, почему не был изменен код.
Дополнительные сведения см. в разделе Допущения анализа проверки кода.
Примечание
Прежде чем обосновывать проверку оранжевого цвета, тщательно продумайте, можно ли улучшить дизайн кода.
Например, ограничение глобальной переменной в одной функции и использование ее в качестве индекса массива во второй функции вызывает уязвимости в коде. Если новая функция вызывается между двумя предыдущими функциями и изменяет глобальную переменную, ограничение больше не применяется.