我做了个测试小程序,在线程内While循环向IdUDPServer发送命令,发送间隔1s,每次循环会在界面上label1.caption显示循环次数,共运行10万次
运行了17000多次时MemProof提示有18个泄露 代码定位第一行是LStrClr(如图)
我的代码如下:
procedure TTestThreadUDPSend.Execute;
var
i: Integer;
FComCtrl: TIdUDPServer; //通信控件
begin
FComCtrl := TIdUDPServer.Create(nil);
if FComCtrl.Active then FComCtrl.Active := False;
FComCtrl.DefaultPort := 4004;
if not FComCtrl.Active then FComCtrl.Active := True;
while i < 100000 do begin
Inc(i);
FI := i;
Synchronize(shwI);
FComCtrl.Send('192.168.0.34',4004, '130300C8000D0683'); Sleep(1000);
end;
FComCtrl.Free;
end;procedure TTestThreadUDPSend.shwI;
begin
Form1.Label1.Caption := '';
Form1.Label1.Caption := IntToStr(FI);
end;procedure TForm1.Button3Click(Sender: TObject);
begin
TestThreadUDPSend := TTestThreadUDPSend.Create(true);
TestThreadUDPSend.FreeOnTerminate := True;
TestThreadUDPSend.Resume;
end;望大神指点,LStrClr是字符串泄露了吗?请大神指点问题出在哪里?
我看你的图上有多处提示,你说的那行提示跟别的也没有区别呀。
编译环境本身有泄露也是有可能的,我看你代码也没问题