Problem mit Pointern

Ich habe eine Schleife geschrieben, die einen String nach einem bestimmten System (immer abwechselnd 2 und 1 Zeichen) in ein zweidimensionales Array einsortiert. Nach der Ausführung kann ich ab einer bestimmten Länge des Strings mein Programm nicht mehr ohne Fehlermeldung schließen, die mir eine Access Violation angibt. Normalerweise bedeutet das ja eine Speicherüberschreitung z.B. bei einem Array aber in diesem Fall erscheint die Exception ja beim Schließen des Programms, deshalb wiß ich nicht womit es zusammenhängt.

Code:
for k := 1 to length(ams)-1 do
for l := 1 to length(ams[k])-1 do
begin
ams[k,l] := chr(0);
end;
k := 0;
a := 2;
while length(x) > 0 do
begin
k := k+1;
if k > length(y) then
begin
k := 1;
a := a+1;
end;
if (odd(k)) and (length(x) >= 2)then
begin
ams[k,a] := x[1] + x[2];
delete(x,1,2);
end
else
begin
ams[k,a] := x[1];
delete(x,1,1);
end;
end;

x ist der betreffende String, ams das Array (ams : array of array of string[2])

Ich kann mir das beim besten Willen nicht erklären.

Hi urmel94

Habe mir deine Code genauer angeschaut. Bei dynamsichen Arrays muss die maximale Array-Grösse mit dem Befehl SetLength() festgelegt werden, weil ein dynamsiches Array am anfang die Grösse von (0,0) hat. -> Siehe die Ergänzung im Code. Ev. musst du für die Var a eine zusätzliche Var anlegen, damit das Array nicht wieder verkleinert wird. Der Wert muss einfach den maximalwert der entsprechenden Dimension festlegen, wobei die Zähung nicht bei 1 sondern bei 0 anfängt, deshalb das +1.

for k := 1 to length(ams)-1 do
for l := 1 to length(ams[k])-1 do
begin
ams[k,l] := chr(0);
end;
k := 0;
a := 2;
while length(x) > 0 do
begin
k := k+1;
if k > length(y) then
begin
k := 1;
a := a+1;
end;
if (odd(k)) and (length(x) >= 2)then
begin
SetLength(ams, k+1,a+1);
ams[k,a] := x[1] + x[2];
delete(x,1,2);
end
else
begin
SetLength(ams, k+1,a+1);
ams[k,a] := x[1];
delete(x,1,1);
end;
end;
end;

Gruss
Sam99