我的TStringList函数有问题吗?(50分)

  • 主题发起人 主题发起人 xinglong
  • 开始时间 开始时间
X

xinglong

Unregistered / Unconfirmed
GUEST, unregistred user!
function TListForm.GetFileExistsTString(var TS: TStringList): Boolean;
var
MyTS: TStringList;
i: integer;
begin
MyTS := TStringList.Create;
MyTS := TS;
TS.Clear
if MyTS.Count > 0 then
begin
for i:=0 to MyTS.Count -1 do
if FileExists(MyTS) then
begin
TS.Add(MyTS);
end;
Result := True;
end
else Result := False;
MyTS.Free;
end;
++++++++++++++++++++++++++++++++++
"TS"是一个存有文件名的TStringList
如TS里的内容为:
c:/aaa/bbb/aaa.txt
c:/aaa/bbb.txt
d:/abc/abc.mp3
等等。
但是我在Form的FormCreate事情中调用这个函数,编译可以通过,但是执行程序就出错。
 
MyTS := TStringList.Create;
MyTS := TS
// <--- 此一大错也!导致TStringList.Create申请的内存流失。

如果想把 Ts 的内容拷贝倒 MyTs中去,应当
MyTs.Assign( Ts );
而你的句子则是将指针复制给MyTs,导致原先MyTs所指向的内存流失了。
 
同意楼上的,应该用assign
 
搞了半天,我什么没有发现这种错误,还是人多眼界宽些,害得自己找来找去,
调试就浪费了许多时间。谢谢musicwind
 
上面两位说的是一个问题
另外一个问题是你在最后把ts free掉了,还想让它返回什么?
其实根本不需要建立MyTS,直接使用传进来的TS就可以了
参数声明也不需要加var,因为对象的传递都是传指针的
 
to 左轻侯
>另外一个问题是你在最后把ts free掉了,还想让它返回什么?
我是MyTS Free

>其实根本不需要建立MyTS,直接使用传进来的TS就可以了
这样什么搞,给个例好吗?有好的例子,分可以另给。
 

to 提问者:
参数中 Var 要不要都是一样的。
写Var 使得程序的意图更加明确,我以为保留为好。
至于 MyTs 好像可以不用创建,比如你遍历每个 Ts,若发现某个不存在,则删除之。
比如:
for i := Ts.Count - 1 downto 0 do
begin
if not FileExists( Ts ) then
Ts.Delete(i);
end

 
后退
顶部