Es conveniente que consideres lo que te comenta
Caro porque puede facilitarte las cosas. Ahora bien, el error que tienes está en la línea:
Código Delphi
[-]
ArrayA[Dim] := Copy (S, loc, Abs(loc-locA));
Los arreglos dinámicos están basados en cero, esto es, los índices son 0, 1, 2, etc., de manera que el índice del último elemento es uno menos que la cantidad de elementos:
Código Delphi
[-]
ArrayA[Dim - 1] := Copy (S, loc, Abs(loc-locA));
Tu algoritmo además, es incorrecto, pero eso ya lo verás una vez que corrijas lo anterior, o bien toma la opción de
Caro.
// Saludos