![]() |
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:
(formen und so rausgekürzt)
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. Ü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 |
Re: DynArray Fehler beim Length erhöhen
Delphi-Quellcode:
Dynamische Arrays sind 0-Basierend:
SetLength(Players, Length(Players) + 1);
Players[Length(Players)] := TPlayer.Create(Name); Erhöhung von 0 -> 1 Players
Delphi-Quellcode:
Length(Players) = 1
Players[Length(Players)] := TPlayer.Create(Name);
aber nur Players[0] gültig Besser
Delphi-Quellcode:
Players[High(Players)] := TPlayer.Create(Name);
|
Re: DynArray Fehler beim Length erhöhen
PS: PlayerIni wird nicht frei gegeben.
|
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 08:03 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