Sziasztok!
Van egy ilyen kódom:
program kvtmoziparser;
{$mode objfpc}{$H+}
uses classes, sysutils, fphttpclient,sax_html, dom_html, dom;
var
doc: thtmldocument;
els: tdomnodelist;
Site: String;
i: LongInt;
begin
doc:=THTMLDocument.Create;
With TFPHttpClient.Create(Nil) do
try
Site:=Get('http://konyvtarmozi.hu/vetitesek.aspx');
finally
Free;
end;
Delete(Site,1,pos('Soron k',Site));
Delete(Site, pos('<td colspan="2" class="focim">Elm',Site),Length(Site));
readhtmlfile(doc,tstringstream.create(Site));
els := doc.GetElementsByTagName('td');
if els.Count > 0 then begin
for i:=0 to els.Count-1 do
writeln(tdomelement(els[i]).textcontent);
end;
doc.free;
end.
Fordítás és futtatás után NEM szabadítja fel az összes lefoglalt memóriát a futás végén, marad 12 felszabadítatlan memória blokk. Gyanúm szerint az els változóban levő adatok okozhatnak problémát.
A HeapTRC az alábbi kimenetet adja:
Heap dump by heaptrc unit
36727 memory blocks allocated : 539872025/540092656
36715 memory blocks freed : 539851498/540072112
12 unfreed memory blocks : 20527
True heap size : 1867776
True free heap : 1845280
Should be : 1845696
Call trace for block $00007FEDE38D0C90 size 17697
$00000000004743B1
$0000000000475CE9
$0000000000476426
$00000000004766A5
Call trace for block $00007FEDE391A040 size 24
$0000000000474A29
$0000000000475CE9
$0000000000476426
$00000000004766A5
Call trace for block $00007FEDE38C03C0 size 84
Call trace for block $00007FEDE3919800 size 32
Call trace for block $00007FEDE38C02C0 size 98
Call trace for block $00007FEDE3919680 size 32
Call trace for block $00007FEDE38C01C0 size 96
Call trace for block $00007FEDE3919440 size 40
$0000000000482F36
Call trace for block $00007FEDE38D03F0 size 2048
Call trace for block $00007FEDE39189C0 size 32
Call trace for block $00007FEDE38C81E0 size 128
Call trace for block $00007FEDE38B00C0 size 216
Valami ötlet, hogy minden memóriablokk felszabadításra kerüljön?