![]() |
new() bei array of record?
hi all
ich drück mich eigentlich immer um fragen die eigentlich so einfach sind aber irgendwie bin ich mir nach langem suchen immer noch nicht im klaren ob das was ich vor hab nun ohne oder mit new / dispose gemacht werden muss ich habe sowas:
Delphi-Quellcode:
und möchte da jetzt dieses array of array mit daten füllen
type Tflaeche = record
data1,data2:string[100]; top:integer; bottom :integer; left:integer; right:integer; end; Tclicklist = array of array of Tflaeche; muss ich da jetzt new() benutzen? oder macht das delphi schon im hintergrund wie mit array of string? klar das ich das array nach benutzung wieder mit setlength(0) kürzen muss um kein speicherleck zu verursachen.. aber auch hier die frage - reicht es ein setlenght(bla,0) auf das "root" array zu machen oder muss ich - weil es ja 2dimensional ist, jedes unterarray auch auf länge 0 setzen? ich würde da jetzt so vorgehen, um meine clickliste zu instanzieren:
Delphi-Quellcode:
1. kann ich mir das new() jetzt sparen?
var list:Tclicklist;
setlength(list,chart.SeriesCount); for s := 0 to high(list) do begin setlength(list[s],chart.Series[s].Count); for c := 0 to high(list[s]) do new(list[s,c]); end; 2. muss ich nacher pro ebene setlength() machen beim array freigeben? oder reichts aufs root-array? |
Re: new() bei array of record?
Es handelt sich ja um einen dynamischen Array. Deshalb muss er mit SetLength() dimensioniert werden
|
Re: new() bei array of record?
New() dürfte eigentlich gar nicht funktionieren..
Nachher beim freigeben musst du soweit ich weiß nur das übergeordnete Array auf die Länge 0 setzen. Also:
Delphi-Quellcode:
SetLength(list,0);
|
Re: new() bei array of record?
Strings und dynamische Arrays => SetLength
Pointer mit zusätzlicher Initialisierung => New + Dispose Pointer ohne alles => z.B. GetMem und FreeMem Objekte => .Create + .Free Ist doch eigentlich recht einfach/verständlich? Zitat:
|
Re: new() bei array of record?
naja das dynamische array soll ja nicht nur in einer funktion "leben" sondern in einer session (intraweb) instanziert bleiben
von daher muss ichs irgendwo mit setlength() dimensionieren und dann wieder wenn die session geclosed wird wieder auf 0 setzen was wäre jetzt ein beispiel mit new() dispose() ? kann dem nicht ganz folgen weil du schreibst: Strings und dynamische Arrays => SetLength Pointer mit zusätzlicher Initialisierung => New + Dispose und da ja dynamische arrays auch nur pointer sind kapier ich grad nicht wieso du das hier separierst?! wann brauch ich eine zusätzliche initialisierung und wie sieht das an einem beispiel aus? |
Re: new() bei array of record?
Bespiel mit new
Delphi-Quellcode:
type
PLäaeche = ^TFlaeche; Tflaeche = record data1,data2:string[100]; top:integer; bottom :integer; left:integer; right:integer; end; ... var flaeche: Pflaeche; ... new( flaeche); ... |
Re: new() bei array of record?
Ja, das ist ja auch ein typisierter Pointer. Wie bereits gesagt wurde, glaube ich nicht, dass New() bei dynamischen Arrays überhaupt kompiliert.
|
Re: new() bei array of record?
Ein dyn. Array bestitzt nur intern einen Zeiger,
aber es ist semantisch kein Pointer.
Delphi-Quellcode:
Pclicklist = Pointer
Tclicklist = array of array of Tflaeche;
Pclicklist = ^Tclicklist; Tclicklist = dyn. Array New gilt nur für typisierte Zeiger (also irgendwelche semantischen Zeiger auf irgendwas ... der untypisierte ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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