Einzelnen Beitrag anzeigen

Glados
(Gast)

n/a Beiträge
 
#1

Record New/Dispose resultiert in MemoryLeaks

  Alt 7. Nov 2017, 22:34
Ich glaube ich habe irgendwo einen Fehler, finde ihn aber nicht

Ich rufe eine Testprozedur auf
Delphi-Quellcode:
 for i := 0 to 50000 do
  TTestUnit.Test(TTest.tdmPostMessage, Form1.Handle, WM_THREAD_MSG, 0, 0, 'TEST STR');
Delphi-Quellcode:
class procedure TTestUnit.Test(Method: TTest; hWnd: Winapi.Windows.hWnd; Msg: UINT; wParam: Winapi.Windows.wParam; lParam: Winapi.Windows.lParam; aString: PChar);
var
 msgData: PTestData;
begin
 New(msgData);

 msgData.Msg := Msg;
 msgData.wParam := wParam;
 msgData.lParam := lParam;
 msgData.aString := aString;

 case Method of
  tdmSendMessage:
   SendMessage(hWnd, msgData.Msg, 0, Winapi.Windows.lParam(msgData));
  tdmPostMessage:
   PostMessage(hWnd, msgData.Msg, 0, Winapi.Windows.lParam(msgData));
  tdmQueue:
   ;
 end;
end;

{*
TTestData = record
  Msg: UINT;
  wParam: Winapi.Windows.wParam;
  lParam: Winapi.Windows.lParam;
  aString: PChar;
end;

PTestData = ^TTestData ;
*}
Delphi-Quellcode:
type
 TForm1...

 public
  procedure TTestMessage(var msg: TMessage); message WM_THREAD_MSG; // WM_THREAD_MSG ist WM_USER + 991;

implementation

procedure TForm1.TTestMessage(var msg: TMessage);
var
 msgData: PTestData;
begin
 msgData := PTestData(msg.lParam);
 try
  Caption := PTestData(msg.lParam).aString;
 finally
  Dispose(msgData);
 end;
end;
Beim Ausschalten des Programms erhalte ich exakt 40001 MemoryLeaks.

Geändert von Glados ( 7. Nov 2017 um 22:37 Uhr)
  Mit Zitat antworten Zitat