2013-07-31 3 views
4

У меня возникает утечка памяти, когда я выхожу из своего приложения на созданном мной объекте THTTPRIO.Утечка памяти на простой HTTPRIO

У меня есть вебсервис определено как следует:

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; 

Я тестирование/создание веб-сервиса, как следует (CustomerCare мой вебсервис интерфейс):

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, я m на самом деле ничего не делает, кроме создания веб-сервиса, снова установите его на ноль и закройте приложение. В этот момент (с ReportMemoryLeaksOnShutDown: = True) я получаю непредвиденную утечку памяти из 12 байтов в TSimpleWebService.

Я попытался добавить деструктор Destroy, но он, похоже, не вызван.

Что мне не хватает?

Спасибо за ваш вклад, Jan

Ах да, я на XE2 Windows 2003. В дополнение к утечке памяти на TSimpleWebservice, я также получаю утечка памяти на объекте TDictionary, но я понятия не имею, откуда это происходит. Когда я компилирую и запускаю тот же проект на XE4/Windows 7, я получаю только утечку памяти TSimpleWebservice.

ответ

4

Чтобы ответить на ваш второй вопрос:

Ах да, я на XE2 Windows 2003. В дополнение к утечке памяти на TSimpleWebservice, я также получаю утечка памяти на объекте TDictionary, но у меня нет подскажите, откуда этот. Когда я компилирую и запускаю тот же проект на XE4/Windows 7, я получаю только утечку памяти TSimpleWebservice.

Существует memoryleak в wsdllookup.pas, скопируйте этот файл в свой проект и найти этот кусок кода

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

изменить его на:

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

Как вы узнали, эта ошибка была исправлена ​​в более поздних версиях Delphi

Смежные вопросы