gpt4 book ai didi

delphi - 简单 HTTPRIO 上的内存泄漏

转载 作者:行者123 更新时间:2023-12-03 15:29:00 27 4
gpt4 key购买 nike

当我退出我创建的 THTTPRIO 对象上的应用程序时,出现内存泄漏。

我的网络服务定义如下:

type
TSimpleWebService = class
protected
FHTTPRIO : THTTPRIO;
public
constructor Create(URL : String);
property HTTPRIO : THTTPRIO read FHTTPRIO;
end;

implementation

constructor TSimpleWebService.Create(URL : String);
begin
FHTTPRIO := THTTPRIO.Create(nil);
FHTTPRIO.URL := URL;
end;

我正在测试/创建 Web 服务,如下所示(CustomerCare 是我的 Web 服务接口(interface)):

procedure TfrmMain.Button1Click(Sender: TObject);
var
webservice: customercare;
begin
webservice := GetSimpleCustomerCareService;
webservice := nil;
frmMain.Close;
end;

function TfrmMain.getSimpleCustomerCareService: CustomerCare;
var
webservice: TSimpleWebService;
begin
webservice := TSimpleWebService.Create('http://this.is.a.test');
Result := webservice.HTTPRIO as CustomerCare;
end;

当我单击 Button1 时,我实际上并没有做任何事情,只是创建了 Web 服务,再次将其设置为 nil 并退出应用程序。此时(使用 ReportMemoryLeaksOnShutDown := True),我在 TSimpleWebService 上意外发生了 12 个字节的内存泄漏。

我尝试添加析构函数 Destroy 但它似乎没有被调用。

我错过了什么?

感谢您的投入,一月

哦,是的,我使用的是 XE2 Windows 2003。除了 TSimpleWebservice 上的内存泄漏之外,我还在 TDictionary 对象上遇到内存泄漏,但我不知道该内存泄漏是从哪里来的。当我在 XE4/Windows 7 上编译并运行相同的项目时,我只得到 TSimpleWebservice 内存泄漏。

最佳答案

回答你的第二个问题:

oh yeah, I'm on XE2 Windows 2003. In addition to the memory leak on TSimpleWebservice, I also get a memory leak on a TDictionary object but I have no clue where that one is coming from. When I compile and run the same project on XE4/Windows 7, I only get the TSimpleWebservice memory leak.

wsdllookup.pas存在内存泄漏,将此文件复制到您的项目中并找到这段代码

destructor TWSDLLookup.Destroy;
begin
ClearWSDLLookup;
inherited;
end;

将其更改为:

destructor TWSDLLookup.Destroy;
begin
ClearWSDLLookup;
Flookup.Free; // this was missing!!!!
inherited;
end;

正如您所发现的,这个错误已在较新的 Delphi 版本中得到修复

关于delphi - 简单 HTTPRIO 上的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com