http://forum.developing.ru/showthread.php?t=8529&page=2
является ли код
Код: Выделить всё
for i := length(s) downto 1 do
if s[i]=s[i+1] then
delete(s,i,1);
Из кода явно видно, что происходит обращение к элементу строки за ее пределами (s[i+1]). В разрезе доступа к ячейке памяти - никакой ошибки нет, но если S будет менятся (например, обрабатываются строки текстового файла) может возникнуть ситуация, что s[i+1] в первом проходе подцепит символ, который принадлежал предыдущему значению. Следовательно код будет работать неверно.
Просьба помочь и рассудить данный спор комментариями и объяснениями. Надеюсь, этот пример послужит уроком для многих начинающих программистов и объяснит почему не следует выходить за рамки выделенной памяти, даже в языках высокого уровня.