Delphi TStringList Free导致异常
发布时间:2020-12-15 09:18:30 所属栏目:大数据 来源:网络整理
导读:考虑这个简短的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 f
考虑这个简短的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, >为什么是field_list<>零? 解决方法
问题是,如果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可能没有被初始化,这可以帮助你自己解决这个问题.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |