Thema: Delphi Stack Überlauf

Einzelnen Beitrag anzeigen

B1nch3N

Registriert seit: 1. Jun 2008
Ort: Herford
6 Beiträge
 
#1

Stack Überlauf

  Alt 1. Jun 2008, 19:34
Hallo,

hoffe ihr könnt mir helfen.
Bekomme in meinem Programm einen Stack Überlauf.
Wenn ich das Programm jedoch nur maximal 4 Felder bearbeiten lasse dann geht es ganz normal und klappt perfekt.

Hier erstmal der Code:
Hier wird der Fehler angezeigt der kommt wenn ich das Programm arbeiten lasse.
Delphi-Quellcode:
Procedure Sortieren(z:integer);
Var
tauschen1: Array [1..4] of Integer;
tauschen2: Array [1..4] of Integer;
Begin
if benutzt<>(9-aktuell) then begin
  for i:=1 to 4 do begin
    tauschen1[i]:= stellung[z,i];
    tauschen2[i]:= farbe[z,i];
  end;
  for i:=(z)to 8 do begin
    for ii:=1 to 4 do begin
      stellung[i,ii]:= stellung[i+1,ii];
      farbe[i,ii]:= farbe[i+1,ii];
    end;
  end;
for i:=1 to 4 do begin stellung[9,i]:= tauschen1[i]; farbe[9,i]:= tauschen2[i]; end;
benutzt:=benutzt+1; end else begin benutzt:=0; aktuell:=aktuell-1; end;
End;
Die normale Rekursion ist diese hier:
Delphi-Quellcode:
Procedure Arbeiten;
Begin

if aktuell=1 then AnfangsKarte;
if (aktuell<10) AND (aktuell>1) then begin
  if Vergleichen(aktuell)= 1 then begin gedreht:=0;benutzt:=0; aktuell:=aktuell+1; end else Drehen(aktuell);
if aktuell<10 then Arbeiten;
end;
End;
Weitere Proceduren:
Delphi-Quellcode:
Function Vergleichen(x:integer):Integer;
Begin
case aktuell of
  2: if (stellung[x,4]<>stellung[x,2]) and (farbe[x,4]=farbe[x,2]) then result:=1 else result:=0;
  3: if (stellung[x,4]<>stellung[x,2]) and (farbe[x,4]=farbe[x,2]) then result:=1 else result:=0;
  4: if (stellung[x,1]<>stellung[x-3,3]) and (farbe[x,1]=farbe[x-3,3]) then result:=1 else result:=0;
  5: if (stellung[x,4]<>stellung[x-1,2]) and (farbe[x,4]=farbe[x-1,2]) AND (stellung[x,1]<>stellung[x-3,3]) and (farbe[x,1]=farbe[x-3,3]) then result:=1 else result:=0;
  6: if (stellung[x,4]<>stellung[x-1,2]) and (farbe[x,4]=farbe[x-1,2]) AND (stellung[x,1]<>stellung[x-3,3]) and (farbe[x,1]=farbe[x-3,3]) then result:=1 else result:=0;
  7: if (stellung[x,1]<>stellung[x-3,3]) and (farbe[x,1]=farbe[x-3,3]) then result:=1 else result:=0;
  8: if (stellung[x,4]<>stellung[x-1,2]) and (farbe[x,4]=farbe[x-1,2]) AND (stellung[x,1]<>stellung[x-3,3]) and (farbe[x,1]=farbe[x-3,3]) then result:=1 else result:=0;
  9: if (stellung[x,4]<>stellung[x-1,2]) and (farbe[x,4]=farbe[x-1,2]) AND (stellung[x,1]<>stellung[x-3,3]) and (farbe[x,1]=farbe[x-3,3]) then result:=1 else result:=0;
end;
End;


Procedure Drehen(y:integer);
VAR a,b:integer;
Begin
if gedreht<3 then begin
  a:=farbe[y,1];
  b:=stellung[y,1];
  for i:=1 to 3 do begin
    farbe[y,i]:=farbe[y,i+1];
    stellung[y,i]:=stellung[y,i+1];
  end;
  farbe[y,4]:=a;
  stellung[y,4]:=b;
  gedreht:=gedreht+1;
end else begin
  gedreht:=0;
  Sortieren(y);
end;
Könnt ihr da irgendwas erkennen?

Schöne Grüße B1nch3N
  Mit Zitat antworten Zitat