むしろなんでエラーになると思うのかを聞きたい。
SetLength(S,2);
をコメントアウトしてもエラーにならなかったよ?