我在vcl表单应用程序中具有此代码:
implementation
{$R *.dfm}
var
MyBitmap: TBitmap;
procedure TFormMain.FormCreate(Sender: TObject);
begin
MyBitmap := TBitmap.Create;
end;
procedure TFormMain.FormDestroy(Sender: TObject);
begin
if Assigned(MyBitmap) then
MyBitmap.Free;
end;
procedure TFormMain.Button1Click(Sender: TObject);
begin
if Assigned(MyBitmap) then
MyBitmap.Free;
end;
第二次单击按钮时,我在按钮的单击处理程序中第二次在 MyBitmap.Free;
中违反访问。但是在单击第一个按钮后,不应再分配MyBitmap
。那么,为什么条件if Assigned(MyBitmap) then
显然可以在第一个按钮上单击时单击第二个按钮?
delphi 10.1柏林更新2
Assigned
功能仅检查指针为Nil
。它没有执行检查是否指向现有对象。释放它后,您需要将其设置为Nil
,以便按照您的期望获得Assigned
功能。FreeAndNil
执行这两个说明。