Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamsches Array von meinem Record-Typ (https://www.delphipraxis.net/43971-dynamsches-array-von-meinem-record-typ.html)

malo 11. Apr 2005 14:22


Dynamsches Array von meinem Record-Typ
 
Hi!

Ich habe in meinem Programm ein Record, das ich gerne als Array benutzen würde. Eigentlich kein Problem, allerdings weiß ich nicht, wie viele Einträge in das Record-Array gemacht werden. Deshalb hab ich das Array als dynamisches Array deklariert. Wenn ich jetzt aber auf das Record zugreife bekomme ich eine Exception. Wenn ich das Array aber als statisches Array deklariere nicht. Warum das? Bzw. wie kann ich das umgehen, ohne auf statische Arrays auszuweichen?

alcaeus 11. Apr 2005 14:23

Re: Dynamsches Array von meinem Record-Typ
 
Hi malo,

hast du auch beachtet dass bei einem dynamischem Array mit 5 Elementen die Indexe von 0..4 gehen?

Greetz
alcaeus

malo 11. Apr 2005 14:24

Re: Dynamsches Array von meinem Record-Typ
 
Zitat:

Zitat von alcaeus
Hi malo,

hast du auch beachtet dass bei einem dynamischem Array mit 5 Elementen die Indexe von 0..4 gehen?

Greetz
alcaeus

Ja, ich hab mein statisches Array auch von 0..n deklariert ;)

glkgereon 11. Apr 2005 14:24

Re: Dynamsches Array von meinem Record-Typ
 
du musst dem mit SetLength(MyArray, MyLength) ne länge zuweisen, um dann mit MyArray[x] draufzugreifen zu können

malo 11. Apr 2005 14:27

Re: Dynamsches Array von meinem Record-Typ
 
Zitat:

Zitat von glkgereon
du musst dem mit SetLength(MyArray, MyLength) ne länge zuweisen, um dann mit MyArray[x] draufzugreifen zu können

Danke, das scheint zu klappen! :thumb:

RavenIV 11. Apr 2005 14:37

Re: Dynamsches Array von meinem Record-Typ
 
warum verwendest du nicht eine TList?
dann musst du dich nicht um die länge kümmern und kannst bequem elemente hinzufügen und löschen...

jim_raynor 11. Apr 2005 14:44

Re: Dynamsches Array von meinem Record-Typ
 
Records und TList sind nicht unbedingt einfach zu verwalten.

malo 11. Apr 2005 14:49

Re: Dynamsches Array von meinem Record-Typ
 
Zitat:

Zitat von RavenIV
warum verwendest du nicht eine TList?
dann musst du dich nicht um die länge kümmern und kannst bequem elemente hinzufügen und löschen...

Ich kenn mich mit TList nicht aus ;)

Ist allerdings auch mal eine Überlegung wert, aber nicht jetzt :)

Binärbaum 11. Apr 2005 14:51

Re: Dynamsches Array von meinem Record-Typ
 
Zitat:

Zitat von RavenIV
warum verwendest du nicht eine TList?
dann musst du dich nicht um die länge kümmern und kannst bequem elemente hinzufügen und löschen...

AFAIK verwendet TList intern auch nur dyn. Arrays, also macht das keinen so großen Unterschied.

MfG
Binärbaum

RavenIV 11. Apr 2005 14:58

Re: Dynamsches Array von meinem Record-Typ
 
Zitat:

Zitat von Binärbaum
AFAIK verwendet TList intern auch nur dyn. Arrays, also macht das keinen so großen Unterschied.

aber die Verwaltung einer TList ist einfacher...

Binärbaum 11. Apr 2005 15:03

Re: Dynamsches Array von meinem Record-Typ
 
Zitat:

Zitat von RavenIV
Zitat:

Zitat von Binärbaum
AFAIK verwendet TList intern auch nur dyn. Arrays, also macht das keinen so großen Unterschied.

aber die Verwaltung einer TList ist einfacher...

Ja, für den Programmierer.
Aber wenn man z.B. 50 Elemente mit Add() hinzufügewn will, wird da 50 mal SetLength aufgerufen.
Wenn man das aber mit einem Array von Hand macht, kann man mit einem Aufruf von SetLength den Array um 50 Elemente vergrößern ;-)

MfG
Binärbaum

RavenIV 11. Apr 2005 15:07

Re: Dynamsches Array von meinem Record-Typ
 
aus der OnlineHilfe von Delphi:
Zitat:

Die Eigenschaft Capacity gibt die zugewiesene Größe des Zeiger-Arrays an, das vom TList-Objekt verwaltet wird.

Delphi-Syntax:

property Capacity: Integer;

C++ Syntax:

__property int Capacity = {read=FCapacity, write=SetCapacity, nodefault};

Beschreibung

Mit Capacity wird die Anzahl der Zeiger vorgegeben, die in der Liste enthalten sein müssen. Wenn nicht genügend Speicher vorhanden ist, um die Liste auf ihre neue Größe zu erweitern, tritt eine EOutOfMemory-Exception auf.

Capacity kann gelesen werden, um die Anzahl der Objekte zu ermitteln, die in der Liste Platz finden, ohne dass weiterer Speicher reserviert werden muss. Verwechseln Sie aber Capacity nicht mit der Eigenschaft Count. Diese gibt die Anzahl der Einträge in der Liste an. Daher ist der Wert von Capacity immer größer oder gleich Count. Wenn Capacity größer als Count ist, kann der nicht genutzte Speicher freigegeben werden, indem Capacity der Wert von Count zugewiesen wird.

Wird ein Element zu einer Liste hinzugefügt, die bereits vollständig gefüllt ist, wird der Wert von Capacity automatisch erhöht. Allerdings lässt sich die Anzahl der Speicherzuweisungen verringern und damit die Leistung der Anwendung erhöhen, indem die Eigenschaft Capacity mit einem größeren Wert belegt wird, bevor Objekte hinzugefügt werden.


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