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.