2013-07-31 35 views
4

我在创建的THTTPRIO对象上退出应用程序时发生内存泄漏。简单HTTPRIO上的内存泄漏

我定义我的web服务如下:

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界面):

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服务,将其设置为零再次退出应用程序。在这一点上(ReportMemoryLeaksOnShutDown:= True),我在TSimpleWebService上收到12个字节的意外内存泄漏。

我曾尝试添加一个析构函数销毁但它似乎没有被调用。

我错过了什么?

感谢您的输入, 扬

噢,我在XE2的Windows 2003除了在TSimpleWebservice内存泄漏,我也得到了TDictionary对象的内存泄漏,但我不知道那一个来自哪里。当我在XE4/Windows 7上编译和运行同一个项目时,我只能得到TSimpleWebservice内存泄漏。

回答

4

要回答你的第二个问题:

噢,我在XE2的Windows 2003除了在TSimpleWebservice内存泄漏,我也得到了TDictionary对象的内存泄漏,但我没有线索来自哪里。当我在XE4/Windows 7上编译和运行同一个项目时,我只能得到TSimpleWebservice内存泄漏。

有在wsdllookup.pas一个memoryleak,这个文件复制到你的项目,找到这段代码

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

将其更改为:

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

当你发现了,此错误已在更新的Delphi版本中得到修复