释放 TBitmap 变量时出现访问冲突——释放后位图变量是否仍被分配?

Access violation when freeing TBitmap variable -- Bitmap variable still assigned after freeing?

我在 VCL Forms 应用程序中有这段代码:

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 执行两条指令。