2

我在 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在第二个按钮单击上不起作用呢?

德尔福 10.1 柏林更新 2

4

1 回答 1

6

Assigned函数仅检查指针是否为Nil。它不会检查它是否指向现有对象。您需要Nil在释放它之后将其设置为才能使Assigned功能按预期工作。FreeAndNil执行这两个指令。

于 2016-12-07T17:27:20.810 回答