![]() |
Dynam. Array vergrössern?
Hallo,
ich Versuch mich gerad ein bisschen damit Dynam. Arrays zu vergrössern, aber Irgendwie wills nich. Die ersten fünf Werte macht die Procedur noch mit, dann wills nich mehr: "Exception der Klasse EAcessViolation mit der Meldung'Zugriffsverletzung......'" Wird wohl irgendwie hierdran liegen:
Delphi-Quellcode:
public
MyListe :Array of Byte; procedure TForm1.AllSpeedButtons(Sender: TObject); var itag : Integer; begin itag := (Sender as TSpeedbutton).Tag; ArrayInsert(itag); Label8.Caption:=IntToStr(MyListe[0]); end; procedure TForm1.ArrayInsert(Item:Integer); var i:Integer; begin //setlength(MyListe, 0); //Initialize(MyListe); setlength(MyListe, length(MyListe) + 1); for i:=0 to length(MyListe)do MyListe[i +1] := MyListe[i]; MyListe[0]:=Item; //Finalize(Myliste end; |
Re: Dynam. Array vergrössern?
Hallo
1. Der Zugriffsbereich des Arrays geht immer von [0..Length-1] 2. Durch das [length+1] greifst du sogar 2 zu weit zu, da stimmt was nicht.. Grüße Benjamin |
Re: Dynam. Array vergrössern?
Code:
for i:=0 to length(MyListe) [b]- 1[/b] do
|
Re: Dynam. Array vergrössern?
Zitat:
schließlich greift er auch noch auf [i + 1] zu ;) greetz Mike |
Re: Dynam. Array vergrössern?
Wenn du ein DynArray um 1 erhöhen möchtest, brauchst Du nur:
Delphi-Quellcode:
zu schreiben. Das ergibt sich daraus, da die Länge immer 1 grösser ist, als der Index des letzten Elements.
SetLength(DynArray, Length(DynArray))
Alternativ kannst Du auch:
Delphi-Quellcode:
benutzen.
SetLength(DynArray, High(DynArray)+1)
MfG |
Re: Dynam. Array vergrössern?
Jo, stimmt,Danke! :wall: :wall: :wall:
|
Re: Dynam. Array vergrössern?
Zitat:
Delphi-Quellcode:
bleibt die größe also wie sie war. Es muss wenn dann schon so lauten:
SetLength(DynArray, Length(DynArray))
Delphi-Quellcode:
SetLength(DynArray, Length(DynArray) + 1)
|
Re: Dynam. Array vergrössern?
Zitat:
|
Re: Dynam. Array vergrössern?
Stimmt, sorry...ich komm mit dem ganzen Kram schon durchnander *g*
|
Re: Dynam. Array vergrössern?
...und noch eine kleine Korrektur:
Die Kopierschleife
Delphi-Quellcode:
kopiert in der vorliegenden Form nur das erste Element in die nachfolgenden Arrayelemente.
for i:=0 to length(MyListe)do MyListe[i +1] := MyListe[i];
Beim Schieben nach rechts muß man DOWNTO benutzen:
Delphi-Quellcode:
Gruß Hawkeye
FOR i := High(MyListe) DOWNTO 1 DO MyListe[i] := MyListe[i - 1];
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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