关于try...finally...end的问题(20分)

  • 主题发起人 主题发起人 guifuli
  • 开始时间 开始时间
G

guifuli

Unregistered / Unconfirmed
GUEST, unregistred user!
一段程序如下:
function DoSomething: Integer;
var
i: Integer;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
MS.LoadFromFile('C:/Temp/1.jpg');
for i := 0 to MS.Size do
begin
// Here do something with MS
if i > SomeValue then
Exit
// 问题在这里了,如果Exit后还会执行finally 后面的 MS.Free 语句吗?如果不能执行MS.Free,那么这里该怎么做呢?
end;
finally
MS.Free;
end;
end;
 
把 Exit 换成 break
 
yutaoku兄,这里只是碰巧是一个循环而已,但是如果不是循环呢,我这里只是举了一个例子,但实际上我用的并不是一个循环,那么该怎么办呢?
 
[:)]还会执行finally 后面的 MS.Free 语句的!
 
没有问题的。无论前面是什么,finally中的code总是要执行的。你可以用showmessage试一试。
 
to 李张柏芝:
但实际上单步调试时并没有执行 MS.Free ,不信你试试。
 
我觉得这个问题你在 MS.Free;
处设个断点,就看出来了啊。
 
但为什么单步跟踪时不会执行呢?
 
这是DELPHI的异常保护机制,
可以用
try
exit;{会显示}// abort;(会显示)// halt;{不会执行}//Application.Terminate;{不会执行}// abort
finally
showmessage('f');
end;
来测试
 
肯定是要执行的。没有特例
 
来自:guifuli, 时间:2004-3-9 16:16:37, ID:2493521
但为什么单步跟踪时不会执行呢?
设置:
tools->Debugge OPtions->Language exceptions->Stop on delphi exceptions的勾勾去掉就OK了
 
再次感谢大家,特别是chenshaizi给我提供帮助,谢谢!
 
后退
顶部