AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Absturz in Delphi: Überlauf?

Ein Thema von hackyie · begonnen am 21. Feb 2005 · letzter Beitrag vom 21. Feb 2005
 
hackyie

Registriert seit: 3. Nov 2003
50 Beiträge
 
#4

Re: Absturz in Delphi: Überlauf?

  Alt 21. Feb 2005, 10:00
AAARGHLLL:.....Grad beim Rauskopieren hab ich's gemerkt: Da steht in einer Schleife mal wieder to length(Array) statt to length(Array)-1. GRRRR und dafür debugt man 2 Tage lang....ich poste trotzdem mal etwas code, da ich mich mit dynamischen ARrays nicht wirklich auskenne bisher, vielleicht fällt ja jemandem irgendwas ziemlich dummes auf, was noch eleganter gemacht werden könnte...
Delphi-Quellcode:
type

  TKarte = record
    FarbWert: integer;
    Farbe: String[5];
    PunktWert: Byte;
    Bildwert: Byte;
    Bild: String[5];
    name:string[12];
  end;

  TCardArray = Array of TKarte;
  TDeskArray = Array of TCardArray;

  TPlayer = Record
    Cards:TCardArray;
    ondesk:boolean;
    name:string[30];
  end;
Soweit die Typen, nun die 2 Methoden:

Delphi-Quellcode:
procedure TForm1.removeCard(var cardSet: TCardArray; cardname: string);
var aSize,i,index:integer;
begin
  aSize := length(cardSet);

  if (cardset[aSize-1].name = cardname) then
  begin
    setLength(cardSet,aSize-1);
  end
  else
  begin
    index := -1;
    for i := 0 to aSize-1 do
      if (cardSet[i].name = cardname) then
        index := i;

    for i := index to aSize-2 do
      cardSet[i] := cardset[i+1];

    setLength(cardSet,aSize-1);
  end;
end;

procedure TForm1.SetToDesk(cardset: TCardArray);
var i:integer;
begin
    setLength(CDesk[DeskNextFree],length(cardSet));

    for i := 0 to Length(cardSet) do
      CDesk[DeskNextFree][i] := cardSet[i];

  inc(DeskNextFree);
end;
Und hier dann der Ausschnitt, wo der Aufruf stattfindet:

Delphi-Quellcode:
if (not checkset(tempCards))and(not checkrow(tempCards)) then
    Statusbar1.SimpleText:='Diese Karten können nicht ausgelegt werden.'

  else
  begin
    setToDesk(tempCards);

    for i := 0 to Length(tempCards)-1 do
      removeCard(Player1.cards,tempcards[i].name);

    updateGUI('Desk');
    updateGUI('Player1');
  end;
Thread(this).Post(this).terminate;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz