Autor Beitrag
Bjoern128
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17



BeitragVerfasst: Fr 11.10.02 13:42 
Hallo!

Ich habe ein sehr seltsames Problem

ich habe ein variables array " array test: of TBeispiel" und TBeispiel ist so deklariert
ausblenden 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
ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

WIN 2000
D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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