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