Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DynArray Fehler beim Length erhöhen (https://www.delphipraxis.net/116019-dynarray-fehler-beim-length-erhoehen.html)

fortuneNext 21. Jun 2008 22:50


DynArray Fehler beim Length erhöhen
 
Hi,
habe mir folgendes kleines Programm gebastelt, das bisher noch überhaupt nichts tut und nur eine Grundlage ist.

Delphi-Quellcode:
type
  TCharacter = class(TObject)
    Name: string;
    MinDmg: integer;
    MaxDmg: integer;
    Armor: integer;
    HP: Integer;
    Description: string;
    constructor Create(iMinDmg, iMaxdmg, iArmor, iHP: integer; iDescription: string);
  end;
  TPlayer = class(TObject)
    Name: string;
    CharacterNumber: integer;
    Characters:Array of TCharacter;
    constructor Create(iName: string);
  end;

var
  PlayerIni: TIniFile;
  Players: Array of TPlayer;

implementation

{$R *.dfm}

constructor TCharacter.Create(iMinDmg, iMaxdmg, iArmor, iHP: integer; iDescription: string);
begin
inherited create;
MinDmg := iMinDmg;
MaxDmg := iMaxDmg;
Armor := iArmor;
HP := iHP;
Description := iDescription;
end;

constructor TPlayer.Create(iName: string);
begin
inherited create;
Name := iName;
end;

procedure LoadPlayer(Name: string);
var
  x: integer;
begin
PlayerIni := TIniFile.Create(ExtractFilePath(ParamStr(0)));
try
  SetLength(Players, Length(Players) + 1);
  Players[Length(Players)] := TPlayer.Create(Name);
  For x := 1 to PlayerIni.ReadInteger(Name, 'CharacterNumber', 0) do
  begin
    ShowMessage('');
  end;
except
  ShowMessage('Fehler beim Lesen!');
end;
x := 0;
end;

procedure TfMain.FormShow(Sender: TObject);
begin
SetLength(Players, 0);
SetLength(Characters, 0);
end;

end.
(formen und so rausgekürzt)
Über einen Button führe ich jetzt die LoadPlayer-Prozedur aus. Klappt auch - aber nur 2x! Sobald die Länge des Arrays auf 3 erhöht werden soll, gibts eine EAccessViolation bei 00401BFA, schreiben von Adresse 0045B82C. Sehr sinnloser Weise jedoch nur manchmal, nicht immer, und völlig ohne Regelmäßigkeit und Schema!
Hat jemand eine Idee, woran das liegen könnte?
Danke!
mfg
fortuneNext

Bernhard Geyer 21. Jun 2008 22:56

Re: DynArray Fehler beim Length erhöhen
 
Delphi-Quellcode:
  SetLength(Players, Length(Players) + 1);
  Players[Length(Players)] := TPlayer.Create(Name);
Dynamische Arrays sind 0-Basierend:

Erhöhung von 0 -> 1 Players
Delphi-Quellcode:
  Players[Length(Players)] := TPlayer.Create(Name);
Length(Players) = 1
aber nur Players[0] gültig

Besser

Delphi-Quellcode:
  Players[High(Players)] := TPlayer.Create(Name);

toms 21. Jun 2008 22:58

Re: DynArray Fehler beim Length erhöhen
 
PS: PlayerIni wird nicht frei gegeben.

fortuneNext 21. Jun 2008 23:28

Re: DynArray Fehler beim Length erhöhen
 
Ahhh, erstes war der Fall :) Hatte mir schon Gedanken drüber gemacht, aber hab wohl doch nen Denkfehler gemacht :thumb:
Und danke für den Free Hinweis, ich hatts wirklich vergessen :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz