은 내가 VCL이 코드는 응용 프로그램 양식이 있습니다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
상태가 첫 번째 버튼 클릭에서 분명히 작동했을 때 두 번째 버튼 클릭에서 작동하지 않는 이유는 무엇입니까? 포인터가 Nil
을 할
델파이 10.1 베를린 업데이트 2
개체 참조를 해제해도 nil과 같지 않은지 확인 된 검사는 아무 것도하지 않습니다. 그러므로 당신은 두 배의 자유를 시도하고 있습니다. –
'System.SysUtils.FreeAndNil (MyBitmap)'이 AV없이 작업을하는 것으로 보입니다. – user1580348
결론적으로 우리는 OBJECT가 FREE로 릴리즈 될 수 있고 OBJECT VARIABLE이 NIL로 설정 될 수 있다는 것을 배웠다. 이 올바른지? – user1580348