我在Indy 10.5.7(Delphi 7下)中有这个漏洞.
5 - 12字节:TIdThreadSafeInteger x 1
21 - 36字节:TIdCriticalSection x 2
我像这样使用Indy:
function getWeb(a,b:Integer):Integer;
var url: string;
H: TIdHttp;
SS: TStringStream;
begin
url := 'http://blabla';
H := TIdHttp.Create(nil);
try
SS := TStringStream.Create('');
try
H.Get(url, SS);
Result := StrToInt(SS.DataString);
FINALLY
SS.Free;
END;
finally H.Free;
end;
Run Code Online (Sandbox Code Playgroud)
泄漏本身并不打扰我,因为在应用程序关闭.这使得我的瓜爆炸是我每次关闭应用程序时看到的错误消息.
为什么会出现这种泄漏
我检查了Indy网站,但它几乎没有意义.无论如何,看起来这个bug无法修复:最新版本的Indy无法用Delphi 7编译.唯一的解决方案可能是Indy 9.更新:看起来网站上的内容调用v10.203实际上是v10.2.3 .
这是FastMM内存管理器出现的问题,并且已经存在了一段时间,并且有很多可用的修复信息.我在Delphi 2010中使用的解决方案是:
变化:
{$IFNDEF DOTNET}
{$IFDEF REGISTER_EXPECTED_MEMORY_LEAK}
function IndyRegisterExpectedMemoryLeak(AAddress: Pointer): Boolean;
{$IFDEF USEINLINE}inline;{$ENDIF}
begin
// ===== My modification begins =====================
Result := FastMM4.RegisterExpectedMemoryLeak(AAddress);
Exit;
// ===== My modification ends =====================
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.