Hi,
Ich bin auf folgendes Problem gestoßen.
Ich brauche für jede Instanz einer Klasse ein Label und erzeuge es deshalb im Creator:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Constructor TClass.Create(Labeltext : String; begin inherited create; MyLabel := TLabel.Create(nil); MyLabel.Top := ROW_1_TOP + (ROW_DIFFERENCE * (NumberInList-1)); MyLabel.Left := LABELS_LEFT; MyLabel.Caption := labeltext; MyLabel.Parent := FrmEinstellungen.GroupBox; end; |
Jetzt wollte ich es entsprechend im destructor freigeben
Delphi-Quelltext
1: 2: 3: 4: 5:
| Destructor TClass.Destroy; begin MyLabel.free; inherited destroy; end; |
Sobald meine Klasse aber zerstört wird bekomme ich ein Accesviolation Error.
Wenn ich entweder dass free im Destructor weglasse, oder aber den mylabel.parent nicht auf die Groupbox
setze, sondern auf nil, bekomme ich den Error nicht.
Mich verwirrt das ganze total.
Erstens dachte ich, dass Parent überhaupt nichts mit freigeben zu tun hat.
Und selbst wenn: Die Groupbox wird zu dem Zeitpunkt ja auch noch nicht freigegeben - er müsste ja nur kommen, wenn ich zuvor die groupbox freigebe.
Zweitens: Wieso sollte sonst ein Error kommen? - Ohne dass .free im destructor würde das label ja noch im Memory rumhängen.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 10.05.2009 um 00:12