Registriert seit: 1. Jun 2008
Ort: Herford
6 Beiträge
|
Stack Überlauf
1. Jun 2008, 20: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
|