Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynam. Array vergrössern? (https://www.delphipraxis.net/64909-dynam-array-vergroessern.html)

Hallo_Thomas 9. Mär 2006 19:30


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;

BenjaminH 9. Mär 2006 19:31

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

Luckie 9. Mär 2006 19:32

Re: Dynam. Array vergrössern?
 
Code:
for i:=0 to length(MyListe) [b]- 1[/b] do

JasonDX 9. Mär 2006 19:37

Re: Dynam. Array vergrössern?
 
Zitat:

Zitat von Luckie
Code:
for i:=0 to length(MyListe) [b]- 1[/b] do

- 2 ;)
schließlich greift er auch noch auf [i + 1] zu ;)

greetz
Mike

Pseudemys Nelsoni 9. Mär 2006 19:40

Re: Dynam. Array vergrössern?
 
Wenn du ein DynArray um 1 erhöhen möchtest, brauchst Du nur:

Delphi-Quellcode:
SetLength(DynArray, Length(DynArray))
zu schreiben. Das ergibt sich daraus, da die Länge immer 1 grösser ist, als der Index des letzten Elements.

Alternativ kannst Du auch:

Delphi-Quellcode:
SetLength(DynArray, High(DynArray)+1)
benutzen.

MfG

Hallo_Thomas 9. Mär 2006 19:40

Re: Dynam. Array vergrössern?
 
Jo, stimmt,Danke! :wall: :wall: :wall:

SirThornberry 9. Mär 2006 19:48

Re: Dynam. Array vergrössern?
 
Zitat:

Zitat von Pseudemys Nelsoni
Wenn du ein DynArray um 1 erhöhen möchtest, brauchst Du nur:

Delphi-Quellcode:
SetLength(DynArray, Length(DynArray))
zu schreiben. Das ergibt sich daraus, da die Länge immer 1 grösser ist, als der Index des letzten Elements.

Das stimmt so nicht. Length fragt die anzahl der möglichen Elemente ab. "Length(DynArray" gibt also 1 zurück wenn 1 Elemente rein passen. Und mit SetLength gibt man ebenfalls an wieviel Elemente in das Array rein passen sollen. mit
Delphi-Quellcode:
SetLength(DynArray, Length(DynArray))
bleibt die größe also wie sie war. Es muss wenn dann schon so lauten:
Delphi-Quellcode:
SetLength(DynArray, Length(DynArray) + 1)

Basilikum 9. Mär 2006 19:51

Re: Dynam. Array vergrössern?
 
Zitat:

Zitat von Pseudemys Nelsoni
Wenn du ein DynArray um 1 erhöhen möchtest, brauchst Du nur:

Delphi-Quellcode:
SetLength(DynArray, Length(DynArray))
zu schreiben. Das ergibt sich daraus, da die Länge immer 1 grösser ist, als der Index des letzten Elements.

Alternativ kannst Du auch:

Delphi-Quellcode:
SetLength(DynArray, High(DynArray)+1)
benutzen.

MfG

hast du dies getestet ? stimmt beides nicht... das Array bleibt genau so lang wie es war...

Pseudemys Nelsoni 9. Mär 2006 20:07

Re: Dynam. Array vergrössern?
 
Stimmt, sorry...ich komm mit dem ganzen Kram schon durchnander *g*

Hawkeye219 9. Mär 2006 20:11

Re: Dynam. Array vergrössern?
 
...und noch eine kleine Korrektur:

Die Kopierschleife
Delphi-Quellcode:
for i:=0 to length(MyListe)do MyListe[i +1] := MyListe[i];
kopiert in der vorliegenden Form nur das erste Element in die nachfolgenden Arrayelemente.
Beim Schieben nach rechts muß man DOWNTO benutzen:

Delphi-Quellcode:
FOR i := High(MyListe) DOWNTO 1 DO MyListe[i] := MyListe[i - 1];
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 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