Thema: Delphi Stack-Überlauf

Einzelnen Beitrag anzeigen

Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#1

Stack-Überlauf

  Alt 4. Sep 2003, 19:08
Hallo Alle Zusammen
ich habe hier eine Procedure aus meinem kartenspiel

Code:
procedure TForm1.naechsterspieler(spieler, wieviel, welchezahl: integer);
var c, d, wie: integer;
    a: array [1..8] of integer;
    kleft: integer;
begin
if spieler = 1 then spielerzug(viel, zahl) else
 begin
   wieviel := viel;
   kleft := mitte;
   for c := 0 to 7 do begin if lb[spieler].Items.Strings[c][2] = '1' then a[1] := a[1] + 1;
                            if lb[spieler].Items.Strings[c][2] = '2' then a[2] := a[2] + 1;
                            if lb[spieler].Items.Strings[c][2] = '3' then a[3] := a[3] + 1;
                            if lb[spieler].Items.Strings[c][2] = '4' then a[4] := a[4] + 1;
                            if lb[spieler].Items.Strings[c][2] = '5' then a[5] := a[5] + 1;
                            if lb[spieler].Items.Strings[c][2] = '6' then a[6] := a[6] + 1;
                            if lb[spieler].Items.Strings[c][2] = '7' then a[7] := a[7] + 1;
                            if lb[spieler].Items.Strings[c][2] = '8' then a[8] := a[8] + 1;
                      end;

   for d := 1 to 8 do
                     if (a[d] = wie) and (d >= welchezahl) then
                         begin showmessage('Der Spieler ' + inttostr(spieler) + ' wird mit ' + inttostr(d) + ' legen.');
                               label7.Caption := inttostr(d);
                               for c := 0 to 7 do
                               if lb[spieler].Items.Strings[c][2] = inttostr(d) then
                                    begin k[(spieler * 8) - (7 - c)].Left := kleft;
                                          kleft := kleft + 15;
                                          k[(spieler * 8) - (7 - c)].top := mitte1;
                                          lb[spieler].Items.Strings[c] := ' ';
                                          labels[spieler].Caption := 'Hat ' + inttostr(wie) + inttostr(d) + ' gelegt';
                                    end;
                                          spieler := spieler + 1;
                                          if spieler > 4 then
spieler := 2;
                                          naechsterspieler(spieler ,wie ,d + 1);
                                    end;



   end;
   label5.Caption := 'spieler kann nicht legen';
   spieler := spieler + 1;
   if spieler > 4 then spieler := 2;
   naechsterspieler(spieler ,wie ,d + 1);
end;
Ich versuche mein Problem zu erklären:
Die oben angezeigte procedure sind die Computer-Spieler.

Doch es kommt immer zu einem sogennanten Stack-Überlauf.
Was ist das? Wie kann ich es beheben? wo liegt der Fehler?
Wodurch wird es verurscht?
  Mit Zitat antworten Zitat