Что произойдёт при чтении элемента за границами массива?

Поведение зависит от языка и способа доступа: исключение, panic, undefined или неопределённое поведение. Почему нельзя обещать один результат для всех массивов.

Короткий ответ

Что ответить на собеседовании

Сначала уточните язык и тип контейнера. Java выбрасывает ArrayIndexOutOfBoundsException, Python для неверного индекса последовательности — IndexError, Go при динамическом выходе за границы — panic. Встроенные массивы C/C++ допускают неопределённое поведение при таком чтении. Обычный массив JavaScript при отсутствии свойства обычно возвращает undefined.

Подробный разбор

Ответ с пояснениями

Универсального ответа «программа обязательно упадёт» нет. Для массива длины n обычные индексы лежат от 0 до n - 1, но правила проверки определяются языком и операцией.

  • Java: чтение по индексу меньше нуля или не меньше длины массива вызывает ArrayIndexOutOfBoundsException; JLS.
  • Python: недопустимый индекс последовательности вызывает IndexError. Отрицательный индекс сам по себе допустим, если указывает на элемент с конца. Срезы имеют другие правила.
  • Go: выход динамического индекса за допустимые границы массива или среза вызывает panic; некоторые некорректные константные индексы обнаруживаются компилятором.
  • C/C++: чтение за границей встроенного массива — неопределённое поведение. Нельзя рассчитывать ни на исключение, ни на конкретный мусорный результат. Проверяемые методы контейнеров, например at(), — другой случай.
  • JavaScript: массив является объектом. При отсутствии соответствующего свойства и свойства в цепочке прототипов чтение возвращает undefined, а не обязательную ошибку границ; правила OrdinaryGet.

В реальной задаче уточните контейнер и смысл «несуществующего»: индекс за длиной, пустая ячейка разреженного массива и отсутствующий ключ словаря — разные ситуации.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку