Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit variablen arrays und Objekten
Bjoern128 - Fr 11.10.02 13:42
Titel: Problem mit variablen arrays und Objekten
Hallo!
Ich habe ein sehr seltsames Problem
ich habe ein variables array " array test: of TBeispiel" und TBeispiel ist so deklariert
Quelltext
1: 2: 3: 4: 5:
| TBeispiel=class(TObject) zahl1:integer; feld:array of Tkeineahnung; zahl2:integer; end; |
so wenn ich nun mein array mit setlength um eins vergrößere muss ich das neue Element ja instanzieren und zwar an der Stelle
Quelltext
1:
| test[length(test)-1]:=TBeispiel.create; |
das funktioniert auch alles super. wenn ich jetzt dsa array um eins verkleinere, ist es ja elegant, das letzte Element wieder freizugeben also mit
Quelltext
1:
| test[length(test)-1].free; |
und dann mit setlength um eins verkleinern wenn ich es aber mache, dann wird von dem vorletzten Atom die letzte Deklaration mit vernichtet also die letzte Deklaration von TBeispiel am vorletzten Feld. in diesem Fall wräe dsa zahl2. Die ist dann für das vorletzte Element nicht mehr verfügbar.
wenn ich in der Deklaration von TBeispiel die Reihenfolge vertausche, wird immer am vohrigen Element des arrays dieser Wert mit freigegeben.
Woran liegt das ?
Vielen Dank
Björn
(11.10.02 17:13 Tino) Code-Tags hinzugefügt.
mk2 - Fr 11.10.02 14:02
hast du n destruktor für tbeispiel geschrieben in dem du feld wieder freigibst also auf NIL setzt? vielleicht liegts daran :?:
mfg mk2
Udontknow - Fr 11.10.02 14:21
Hmmm, du wirfst ein wenig die Begriffe durcheinander, das macht Hilfe schwer...
Eine Deklaration kann nicht vernichtet werden. Du gibst Objekte frei. Soweit so gut. Variablen (in Objekten auch Felder genannt )wie Zahl1, Zahl2 oder das Array können aber auch nicht freigegeben werden, das ist nicht möglich. Was also meinst du damit, wenn du schreibst, Zahl2 des vorletzten Objekts im Array wurde mit dem letzen Objekt freigegeben?
Wo du sowieso schon Objekte einsetzt, verwendest du am besten anstelle von Arrays (Igitt! :wink: ) TList-Objekte, in denen du dann eben die Pointer der erstellten Objekte auflistest.
Cu, :)
Udontknow
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!