Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

delphi - Why are memory leaks reported for Indy 10?

I have this leak in Indy 10.5.7 (under Delphi 7).

5 - 12 bytes: TIdThreadSafeInteger x 1
21 - 36 bytes: TIdCriticalSection x 2


I use Indy like this:

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;

The leak itself doesn't bother me since is on app shutdown. That makes my melon explode is the error message I see every time I shut down the app.

Why this leak appear?


I have checked the Indy web site but it barely makes sense. Anyway, it looks this bug cannot be fixed: the latest version of Indy cannot be compiled with Delphi 7. The only solution might be Indy 9. Update: it looks like what on the web site calls v10.203 is is actually v10.2.3.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is a problem that occurs with FastMM memory manager and has been around for a while and there is a lot of information available on fixes. The solution I use in Delphi 2010 is:

  1. Make the changes below to the file IdGlobal.pas
  2. Add the path "C:Program FilesEmbarcaderoRAD Studio7.0sourceIndyIndy10System" (without quotes) to the library.

Changes:

{$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 =====================

Hope this helps.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...