У меня есть этот код в VCL Forms Application:Нарушение прав доступа при освобождении переменной TBitmap - переменная битмапа по-прежнему назначается после освобождения?
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 Berlin Update 2
Назначенные проверки на равенство нулю, освобождение ссылки на объект не делает его нулевым. Следовательно, вы пытаетесь сделать двойной доступным. –
Кажется, что 'System.SysUtils.FreeAndNil (MyBitmap)' выполняет работу без AV. – user1580348
Итак, окончательно мы узнали: OBJECT может быть освобожден с помощью 'FREE', а OBJECT VARIABLE можно установить на' NIL', а не наоборот. Это верно? – user1580348