考虑这短短的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