2011年10月17日星期一

datasnap的初步 LogInfo的内存泄漏

前面写的LogInfo,有内存泄漏,原因不明,漏8byte
 修改为

function LogInfo(msg: UTF8String): Boolean;
var
  p: PAnsiChar;
  len: Integer;
begin
  len := Length(msg);
  GetMem(p, len + 1);
  Move(msg[1], p^, len);
  p[len] := #0; //for wm_log's freemem
  PostMessage(Form1.Handle, WM_LOG, WPARAM(p), len + 1);
end;
procedure TForm1.WM_Log(var msg: TMessage);
var
  p: PAnsiChar;
begin
  p := PAnsiChar(msg.WParam);
  Form1.Memo1.Lines.Add(p);
  FreeMem(p, msg.LParam);
end;
仍然泄漏,原因不明,仍然漏8byte

难道时代变了,在线程A里面GetMem的,不能在线程B里FreeMem了?

但是我把这些代码,单独拿出来,放在一个Proejct里测试时,同样在线程A里Get,在线程B里Free,却没有问题,真让人费解。不知道datasnap的框架里到底搞了什么。


没有评论:

发表评论