"流"的释放问题(100分)

J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这个函数是返回流,但在使用中出现个不太好理解的问题:

function abc(id:integer): TMemoryStream;
var
vStream: TmemoryStream;
begin

vStream:= TmemoryStream.Create;
vStream := NIL;
try
with adodataset1 do
begin
.........
XXX.savetostream(vStream);
end;
finally
adodataset1.close;
vStream.free
//如果我屏蔽了这一句,那这段函数就可以正常执行了,
//但没有释放了资源,这样做下去会不会有内存泄漏?
end;
Result := vStream;
end;
 
vStream:= TmemoryStream.Create;
vStream := NIL;
这两句是不是反了
你把它们的位置对调一下再试试
 
vStream := NIL
//注释掉这句
实在要用也应该在
vStream.free;
的后面用。
 
樓主的函數裡不能用 vStream.free;
因為當函數在執行中是不能釋放的。
在過程裡也要處理完成後才能釋放。
 
to bbscom:
那如果我不释放,DELPHI是否有回收机制,把这部分内存给释放掉呢?
 
手动创建的类,系统是不会自动释放其资源的,除非在创建的时候指定了其所有者。
 
想了个变通的办法把这个问题给解决掉了,[:(]
 
顶部