I made simple example, if i understood right:
type
{ TTestClass }
TTestClass = class
public
sl: TStringList;
constructor Create;
destructor Destroy; override;
end;
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
test: TTestClass;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
test:=TTestClass.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(test);
end;
{ TTestClass }
constructor TTestClass.Create;
begin
sl:=TStringList.Create;
end;
destructor TTestClass.Destroy;
begin
form1.test.sl.Free; // Crashes (uncommented)
//sl.Free; // Works normally
//self.sl.Free; // Also works normally
inherited Destroy;
end;