Einzelnen Beitrag anzeigen

delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Hilfestellung zu meinem Speicherleck

  Alt 9. Mai 2011, 18:16
Hier die verbesserte Log-Datei (nur ein Ausschnitt der TStringList):

Code:
--------------------------------2011/5/9 19:14:08--------------------------------
A memory block has been leaked. The size is: 84

This block was allocated by thread 0x1288, and the stack trace (return addresses) at the time was:
4043E2 [System.pas][System][@GetMem][2979]
404FC3 [System.pas][System][TObject.NewInstance][9433]
40555A [System.pas][System][@ClassCreate][10277]
43B692 [Classes.pas][Classes][TStringList.Create][5788]
75821438 [CloseHandle]
4E4AE0 [..\Source\ProcessHandler.pas][ProcessHandler][TProcessHandler.GetAllRunningProcs][278]
4E4A5D [..\Source\ProcessHandler.pas][ProcessHandler][TProcessHandler.SetGlobalProcessesAffinity][262]
4EF242 [..\Source\FmMulticorerModule.pas][FmMulticorerModule][TFmMainModule.FormCreate][206]
41E25E [SysUtils][TThreadLocalCounter.Open]
4D77C3 [Forms.pas][Forms][TCustomForm.DoCreate][3319]
4D73FF [Forms.pas][Forms][TCustomForm.AfterConstruction][3203]

The block is currently used for an object of class: TStringList

The allocation number is: 9385

Current memory dump of 256 bytes starting at pointer address 7EF8B4A0:
20 F8 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D0 28 E0 7E
36 00 00 00 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 B9 D4 5D 05 80 80 80 80 80 80 80 80 00 00 00 00 E0 4B F8 7E
00 00 00 00 00 00 00 00 D0 E9 40 00 00 00 00 00 DB 24 00 00 E2 43 40 00 C7 74 40 00 04 6C 40 00
5E 4B 4E 00 5D 4A 4E 00 42 F2 4E 00 5E E2 41 00 C3 77 4D 00 FF 73 4D 00 C8 55 40 00 D4 73 4D 00
88 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 00 00 00 00 00 00 00 E7 1A 51 82
B0 04 02 00 01 00 00 00 20 00 00 00 46 00 6C 00 61 00 73 00 68 00 55 00 74 00 69 00 6C 00 36 00
   ø  B . . . . . . . . . . . . . . . . . . . . . . . . . Р (  à  ~
6  . . . < . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . ¹  Ô  ] . &#8364; &#8364; &#8364; &#8364; &#8364; &#8364; &#8364; &#8364; . . . . à  K ø  ~
. . . . . . . . Р é  @  . . . . . Û  $  . . â  C @  . Ç  t @  . . l @  .
^  K N . ] J N . B ò  N . ^  â  A . à w M . ÿ  s M . È  U @  . Ô  s M .
&#710; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . N . . . . . . . ç  . Q &#8218;
°  . . . . . . .    . . . F . l . a . s . h . U . t . i . l . 6  .


EDIT:

Ich glaube das Problem bezieht sich auf meine Funktion in der ich die Prozesse auslese und ich eine TStringList speicher...

Delphi-Quellcode:
function TProcessHandler.GetAllRunningProcs: TStringList;
// returns all currently running processes
var
  s: string;
  sl: TStringList;
  User: string;
begin
  Result := nil;
// User := GetEnvironmentVariable('USERNAME');
  sl := TStringList.Create;
  try
    hProcSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcSnap <> INVALID_HANDLE_VALUE) then
    begin
      pe32.dwSize := SizeOf(ProcessEntry32);
      if (Process32First(hProcSnap, pe32)) then
      begin
        s := pe32.szExeFile;
// if GetUsernameByExeName(s) = User then
          sl.Add(s);
        while Process32Next(hProcSnap, pe32) do
        begin
          s := pe32.szExeFile;
// if GetUsernameByExeName(s) = User then
            sl.Add(s);
        end;
      end;
      Result := sl;
    end;
    CloseHandle(hProcSnap);
  finally
    sl := nil;
    sl.Free;
  end;
end;

Bin ich auf dem richtigen Weg?

Geändert von delphinub23 ( 9. Mai 2011 um 18:20 Uhr)
  Mit Zitat antworten Zitat