Registriert seit: 30. Aug 2008
208 Beiträge
FreePascal / Lazarus
|
Freigabe von Objekten in Objekten
22. Okt 2009, 15:06
Hallo ich habe ein Objekt erstellt, dass ein Objekt erstellt, welches wiederum ein Objekt erstellt.
Nun passiert es bei der Freigabe des Innersten Objektes, das ich ein Speicherzugriffsfehler bekomme.
Dieser tritt auf wenn der Destructor des Innersten Objektes aufgerufen wird. Hier ist der Quelltext( die Stelle wo der Fehler autritt ist gekennzeichnet) :
Delphi-Quellcode:
unit Unit2;
interface
uses
Classes, SysUtils, Variants, Math, Grids, Forms, Dialogs, Controls,
StdCtrls, Windows, Messages, Graphics, Unit3;
type
TObjektMit2Objekten = class
public
Objekt1 : TObjekt1;
constructor Create(ZuBenutzendesFormular : TWinControl);
destructor Destroy; override;
end;
implementation
constructor TObjektMit2Objekten.Create(ZuBenutzendesFormular : TWinControl);
begin
inherited Create;
Objekt1 := TObjekt1.Create(ZuBenutzendesFormular,1);
Objekt1 := TObjekt1.Create(ZuBenutzendesFormular,2);
end;
destructor TObjektMit2Objekten.destroy;
begin
Objekt1.free;
Inherited destroy;
end;
end.
Delphi-Quellcode:
unit Unit3;
interface
uses
Classes, SysUtils, Variants, Math, Grids, Forms, Dialogs, Controls,
StdCtrls, Windows, Messages, Graphics;
type
TObjekt2 = class(TEdit)
public
constructor Create(AOwner: TComponent); override;
end;
TObjekt1 = class(TStringGrid)
public
Objekt2 : TObjekt2;
constructor Create(AOwner: TComponent; Anders : byte); reintroduce;
destructor destroy; override;
end;
implementation
constructor TObjekt1.Create(AOwner: TComponent; Anders : byte);
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
case Anders of
1:
begin
Left := 450;
Top := 150;
DefaultColWidth := 30;
DefaultRowHeight := 30;
FixedCols := 0;
FixedRows := 0;
BorderStyle := bsSingle;
ColCount := 8;
RowCount := 1;
Width := 253;
Height := 32;
end;
2:
begin
Objekt2 := TObjekt2.Create(AOwner);
Objekt2.Top := 200;
Left := 450;
Top := 200;
DefaultColWidth := 30;
DefaultRowHeight := 30;
FixedCols := 0;
FixedRows := 0;
BorderStyle := bsSingle;
ColCount := 8;
RowCount := 1;
Width := 253;
Height := 32;
end;
end;
end;
destructor TObjekt1.destroy;
begin
Objekt2.Free; //Fehler ??!!
inherited destroy;
end;
constructor TObjekt2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := TWinControl(AOwner);
Left := 400;
Width := 50;
AutoSize := false;
Height := 32;
Font.Size := 16;
Text := ' Objekt2';
end;
end.
|
|
Zitat
|