Неправильная инициализация массива при использовании инициализаторов
Этот дефект возникает, когда программа Polyspace ® Bug Finder™ считает, что инициализация массива с использованием инициализаторов неверна.
Этот дефект относится к обычным и назначенным инициализаторам. В C99 с назначенными инициализаторами можно разместить элементы инициализатора массива в любом порядке и неявно инициализировать некоторые элементы массива. Назначенные инициализаторы используют индекс массива для установления соответствия между элементом массива и элементом инициализатора массива. Например, оператор int arr[6] = { [4] = 29, [2] = 15 } эквивалентно int arr[6] = { 0, 0, 15, 0, 29, 0 }.
Вы можете использовать инициализаторы неправильно одним из следующих способов.
| Проблема | Риск | Возможное исправление |
|---|---|---|
В инициализаторе одномерного массива содержится больше элементов, чем размер массива. | Неиспользуемые элементы инициализатора массива указывают на возможную ошибку кодирования. | Увеличьте размер массива или удалите лишние элементы. |
Фигурные скобки, содержащие значения инициализатора, размещаются неправильно. | Из-за неправильного размещения фигурных скобок некоторые элементы инициализатора массива не используются. Неиспользуемые элементы инициализатора массива указывают на возможную ошибку кодирования. | Правильно разместите раскосы. |
В назначенном инициализаторе не выполняется явная инициализация первого элемента массива. | Неявная инициализация первого элемента массива указывает на возможную ошибку кодирования. Возможно, вы упустили из виду тот факт, что индексирование массива начинается с 0. | Инициализируйте все элементы явным образом. |
В назначенном инициализаторе элемент инициализируется дважды. | Первая инициализация переопределена. Первая избыточная инициализация указывает на возможную ошибку кодирования. | Удалите резервную инициализацию. |
В одной инициализации используются назначенные и неназначенные инициализаторы. | Пользователь или другой рецензент кода не может определить размер массива путем проверки. | Используйте назначенные или неназначенные инициализаторы. |
Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Исправление может быть реализовано для любого события в последовательности. Если сведения о результатах не отображают историю событий, можно выполнить обратную трассировку, щелкнув правой кнопкой мыши параметры в исходном коде и просмотреть предыдущие связанные события. См. также раздел Интерпретация результатов поиска ошибок в интерфейсе пользователя Polyspace Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки: IMPROPER_ARRAY_INIT |
| Воздействие: среднее |
| ИДЕНТИФИКАТОР CWE: 665 |