Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Zeiger in TList (https://www.delphipraxis.net/189730-zeiger-tlist.html)

js747a 13. Jul 2016 21:41


Zeiger in TList
 
Hallo, Versuche hier Mein Programm mit Pointer und TList zu erstellen. dabei verstehe ich das nicht so 100 %. Habe schon einige Tutorials duchgelesen aber mir bleiben immer noch fragen.

Zb. Wenn ich
Delphi-Quellcode:
type pElement : ^Element //zeiger auf eine Record
     Element : Record
        Zahl1 : Integer;
        Zahl2 : Integer;
     End;

Var ElementListe : TList
    ElementArray : array[1..20] of Element;
Wenn ich jetzt eine Liste erstelle

Delphi-Quellcode:
ElementListe := TList.Create
in einer Procedure die Zeiger erstelle und an ElementListe anhänge mit Procedure einfugen
Delphi-Quellcode:
   
Procedure einfugen;
Var MyElement : PElement;
    i        : Integer;
Begin
  For i := 1 to 20 do
  Begin
    New(MyElement);
    MyElement^ := ElementArray[i];
    ElementListe.add(MyElement );
  End;
End;
Wenn ich auf die Daten in element zugreifen möchte muss ich doch wieder Zb.Procedure Zugreifen
Delphi-Quellcode:
 
Procedure Zugreifen;
Var MyElement : PElement;
Begin
    New(MyElement);
    MyElement:= ElementListe[0]; //  - erstes Element
    x := MyElement.Zahl1 ;
muss ich hier jedesmal den Zeiger wieder mit freigeben.


Delphi-Quellcode:
dispose(MyElement);
Variablen sind doch nur gülig in der Procedur. Zeiger auch ?
oder bleiben die Zeiger erhalten wenn ich sie nicht freigebe und der Speicher ist irgendwann voll ?[/COLOR]


End;

p80286 13. Jul 2016 22:44

AW: Zeoiger in TList
 
Zunächst einmal, ein Zeiger ist eine Variable die eine Speicheradresse enthält. Mit New() reservierst Du diesen Speicher und mit Dispose gibst du ihn wieder frei. Nach einem Dispose solltest Du den Inhalt deines Pointers auf Nil setzen, damit klar ist, daß der Zeiger nirgendwo hin zeigt.
Tlist verwaltet Zeiger. Liste[0] liefert einen Zeiger und keinen Speicherinhalt. Den erreichst Du z.B. durch
Delphi-Quellcode:
meintyp(liste[0]^).Feld1
.

Gruß
k-H

hoika 14. Jul 2016 05:20

AW: Zeoiger in TList
 
Hallo,
schau dir mal TObjectList an
und steige um auf Klassen.

Heiko

relocate 14. Jul 2016 07:19

AW: Zeoiger in TList
 
Hi,

wenn Du Englisch kannst, dann findest Du hier einen guten Artikel über Pointer: http://rvelthuis.de/articles/articles-pointers.html oder hier: http://www.delphibasics.co.uk/Article.asp?Name=Pointers. Zeiger haben ihre Tücken, aber wenn man sie verstanden hat, ist es eigentlich nicht schwer. Da ich sehr komplexe Datenstrukturen habe, die mit den einfachen Standardwerkzeugen kaum abzubilden sind, nutze ich sie auch noch regelmäßig. Es kommt immer darauf an, was man vor hat.

Gruß

js747a 14. Jul 2016 11:21

AW: Zeiger in TList
 
Hallo, erstmal vielen dank für euere Antworten. Ich muss mir das alles noch mal genau ansehen.

Grus. Johnny

http://www.johnny-modellbau.de/


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