考慮這短短的Delphi程序:當我運行這德爾福的TStringList免費導致異常
procedure TfrmXQuery.FieldListFillFromDefault;
var
field_list: TStringList;
begin
try
if x <> '' then begin
field_list := TStringList.Create;
{do some stuff with field_list}
end;
finally
if field_list <> NIL then
begin
field_list.Free;
end;
end;
end;
,德爾福3,其中x = '',因此永遠不會創建FIELD_LIST,
- 爲什麼
field_list <> NIL
? - 是未初始化爲
NIL
的對象? - 如果不是
NIL
這是什麼? - 如果是未分配而不是
NIL
我怎麼知道是否要Free
呢?該Assigned
功能並沒有告訴我:if Assigned(an_object)
是if an_object = NIL
絕對沒有必要在免費之前檢查指定的參考。免費已經這樣做,如果分配調用Destroy。這就是爲什麼你不應該叫Destroy – 2013-03-16 03:53:19
沒有編譯器警告你這個代碼?切勿忽略編譯器診斷。 – 2013-03-16 04:34:03
此答案將對您有所幫助:http://stackoverflow.com/questions/8548843/why-should-i-not-use-if-assigned-before-using-or-freeing-things/8550628#8550628 – 2013-03-16 07:33:17