我一直在使用ZLib
函数来压缩/解压缩内存中的流。如果我尝试解压缩无效流,它会泄漏内存。以下代码会泄漏内存:
uses
Winapi.Windows, System.Classes, System.ZLib;
function DecompressStream(const AStream: TMemoryStream): Boolean;
var
ostream: TMemoryStream;
begin
ostream := TMemoryStream.Create;
try
AStream.Position := 0;
// ISSUE: Memory leak happening here
try
ZDecompressStream(AStream, ostream);
except
Exit(FALSE);
end;
AStream.Clear;
ostream.Position := 0;
AStream.CopyFrom(ostream, ostream.Size);
result := TRUE;
finally
ostream.Free;
end;
end;
var
s: TMemoryStream;
begin
ReportMemoryLeaksOnShutdown := TRUE;
s := TMemoryStream.Create;
try
DecompressStream(s);
finally
s.Free;
end;
end.
我尝试在TMemoryStream
此处解压缩为空,并在执行结束时显示发生了内存泄漏。在德尔福 XE2 上进行测试。
如何防止这种泄漏发生的任何想法,因为在现实世界中,我的应用程序将有机会尝试解压缩无效流并在那里泄漏内存。
QC: http://qc.embarcadero.com/wc/qcmain.aspx?d= 120329 - 声称从 XE6 开始已修复