Problem mit Pointern

Von: , Frage gestellt am So, 4. Sep 2011

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.

1 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 1 hilfreich
    Re: Problem mit Pointern

    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

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!