Delphi TStringList Free引发异常,如何避免长尾词问题?

2026-04-10 02:472阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计376个文字,预计阅读时间需要2分钟。

Delphi TStringList Free引发异常,如何避免长尾词问题?

delphiprocedure TfrmXQuery.FieldListFillFromDefault;var field_list: TStringList;begin if x '' then begin field_list :=TStringList.Create; try { Do some stuff with field_list } finally if field_list nil then field_list.Free; end; end;end;

考虑这个简短的Delphi程序:

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;

当我在Delphi 3中运行它时,x =”以便永远不会创建field_list,

Delphi TStringList Free引发异常,如何避免长尾词问题?

>为什么是field_list<>零?
>对象未初始化为NIL?
>如果它不是NIL是什么?
>如果它是未分配的而不是NIL我怎么知道是否要释放它? Assigned函数没有告诉我:如果Assigned(an_object)等于an_object = NIL

问题是,如果x =”,最终会发生.由于field_list仅在x<>时初始化. ”,它是该点之前的随机内存位置,因为它是一个未初始化的局部变量.随机值允许调用field_list.free,因为它不等于nil. (Delphi不初始化局部变量(在函数或过程中声明的变量).)

var somevar: sometype; begin // at this point, somevar is just a chunk of memory that // holds whatever happens to be in that chunk somevar := nil; // now somevar = a specific value you can test // other code end;

你不应该测试<> nil(正如其他人在评论中指出的那样)是否正确构造了代码.

procedure TfrmXQuery.FieldListFillFromDefault; var field_list : TStringList; begin if x <> '' then begin field_list := TStringList.Create; try {do some stuff with field_list} finally field_list.Free; end; end; end;

(如果你打开提示和警告,编译器会告诉你field_list可能没有被初始化,这可以帮助你自己解决这个问题.)

本文共计376个文字,预计阅读时间需要2分钟。

Delphi TStringList Free引发异常,如何避免长尾词问题?

delphiprocedure TfrmXQuery.FieldListFillFromDefault;var field_list: TStringList;begin if x '' then begin field_list :=TStringList.Create; try { Do some stuff with field_list } finally if field_list nil then field_list.Free; end; end;end;

考虑这个简短的Delphi程序:

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;

当我在Delphi 3中运行它时,x =”以便永远不会创建field_list,

Delphi TStringList Free引发异常,如何避免长尾词问题?

>为什么是field_list<>零?
>对象未初始化为NIL?
>如果它不是NIL是什么?
>如果它是未分配的而不是NIL我怎么知道是否要释放它? Assigned函数没有告诉我:如果Assigned(an_object)等于an_object = NIL

问题是,如果x =”,最终会发生.由于field_list仅在x<>时初始化. ”,它是该点之前的随机内存位置,因为它是一个未初始化的局部变量.随机值允许调用field_list.free,因为它不等于nil. (Delphi不初始化局部变量(在函数或过程中声明的变量).)

var somevar: sometype; begin // at this point, somevar is just a chunk of memory that // holds whatever happens to be in that chunk somevar := nil; // now somevar = a specific value you can test // other code end;

你不应该测试<> nil(正如其他人在评论中指出的那样)是否正确构造了代码.

procedure TfrmXQuery.FieldListFillFromDefault; var field_list : TStringList; begin if x <> '' then begin field_list := TStringList.Create; try {do some stuff with field_list} finally field_list.Free; end; end; end;

(如果你打开提示和警告,编译器会告诉你field_list可能没有被初始化,这可以帮助你自己解决这个问题.)