главная новое лучшее написать
1

Ответ спасен из Яндекс.Кью

В школе, в начале 1990-х, я учился программировать и позже участвовал в олимпиадах по программированию на языке Turbo Pascal. Особенность, отличающая его от языков, на которых обычно учатся программировать сейчас (как правило, это Python), состоит в том, что обращение к элементу массива с индексом, находящимся за его пределами (то есть меньшим 0 или большим длины массива), молча и, как правило, без всяких runtime-ошибок попадает в находящуюся рядом память.

Например, предположим, программа для решения олимпиадной задачки по программированию на Pascal использует два массива: исходный data, содержащий данные, с которыми нужно что-то сделать, и вспомогательный tmp, который мы захотим, скажем, отсортировать "пузырьком", меняя местами tmp[n] и tmp[n-1]. В памяти данные двух массивов, скорее всего, будут расположены подряд, и если случайно начать цикл с n=0, то при обращении к элементу вспомогательного массива tmp[n-1] мы залезем в последний элемент массива data. Это не будет runtime-ошибкой, программа не "упадёт", но с точки зрения программиста произойдет какая-то странная бредятина: содержимое массива data после прохождения цикла сортировки пузырьком поменялось, а ведь мы к нему даже не обращались! Не понимая сути произошедшего, можно искать ошибку часами или даже заподозрить, что компьютер или компилятор "глючат".

Такое поведение на самом деле даже хуже, чем его аналоги в языке C, а тем более C++, которые из-за встроенных возможностей жонглировать указателями на произвольное место в памяти традиционно считаются очень небезопасными. Молчаливое залезание не в то место памяти легко устроить и в C/C++, но этот источник ошибок хорошо известен, да и компилятор с менеджером памяти стараются ловить его там, где могут. Язык Turbo Pascal же выглядел строго и респектабельно, но его массивы и строки, по сути, являлись теми же указателями, только он в этом не признавался. Ни я, ни мои школьные учителя тогда не понимали, как всё устроено "под капотом" достаточно хорошо, чтобы научиться быстро выявлять подобные ошибки и бороться с ними.

Когда-то давным-давно это стоило мне одного-двух дипломов на всероссийской олимпиаде.