Индекс массива вне границ во время доступа к массиву
Этот дефект возникает, когда индекс массива выходит за пределы диапазона [0...array_size-1] во время доступа к массиву.
Доступ к массиву за пределами его границ является неопределенным поведением. Можно прочитать непредсказуемое значение или попытаться получить доступ к расположению, которое не разрешено, и обнаружить ошибку сегментации.
Исправление зависит от первопричины дефекта. Например, вы получили доступ к массиву внутри цикла, и произошла одна из следующих ситуаций:
Верхняя граница цикла слишком велика.
Используется индекс массива, который совпадает с индексом цикла, а не на единицу меньше индекса цикла.
Чтобы устранить проблему, необходимо изменить ограничение цикла или индекс массива.
Другой причиной, по которой индекс массива может превышать границы массива, является предварительное преобразование из подписанных в неподписанные целые числа. Преобразование может привести к обтеканию значения индекса, в результате чего индекс массива превысит границы массива.
Часто детали результата показывают последовательность событий, которые привели к дефекту. Исправление может быть реализовано для любого события в последовательности. Если сведения о результатах не отображают историю событий, можно выполнить обратную трассировку, щелкнув правой кнопкой мыши параметры в исходном коде и просмотреть предыдущие связанные события. См. также раздел Интерпретация результатов поиска ошибок в интерфейсе пользователя Polyspace Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
| Группа: Статическая память |
| Язык: C | C++ |
| По умолчанию: Вкл. |
Синтаксис командной строки: OUT_BOUND_ARRAY |
| Воздействие: Высокое |
| CWE ID: 119, 131, 466 |