- //我写了一个函数,返回值是TStrings类型的,函数如下:
- function func(s:string):tstrings;
- var
- strS:Tstringlist;
- begin
- strS := TStringList.Create;
- strS.insert(0,'00000');
- result := strS;
- strS.free;
- end;
- //调用 :
- listbox1.items := func(s);//错误,在函数还没有全部完成之前 strS已经释放掉了 。
- {TStrings是类,类都是引用类型,不是值类型,因为strS.Free意味着这个类被释放了,而在以后的代码中又去引用一个被释放掉的类,肯定要出错的,把函数原型修改成:
- function TForm1.GetFileVerInfo(FileName:string; var R: TStrings):Boolean;
- 在这个函数中不要对R进行Free的操作,在你真正用完后再释放。}
- //改后
- procedure func(s:string;var list:tstrings);
- begin
- list.add('000');
- end;
- //调用
- var
- lst:TStrings;
- s:string;
- begin
- lst := TStringList.Create;
- func(s,lst);
- lst.free;
- end;
- //Ok,搞定
TStrings做函数返回值类型的错误
最新推荐文章于 2023-12-25 09:38:59 发布