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