[fpc-pascal] Memory leak

dhkblaszyk at zeelandnet.nl dhkblaszyk at zeelandnet.nl
Sun Dec 18 15:45:58 CET 2011


  

On 18 dec '11, Jonas Maebe wrote: 

> On 18 Dec 2011, at 14:04,
dhkblaszyk at zeelandnet.nl [1]wrote:
> 
>> mytest^.name :=
Format('%s.%.3d', ['name', 1]); This assigns 'name.001' to the pointer
variable but causes a memleak. If I assign the same value as string
constant no memleak occurs, so it must be something related to format.
>

> It's related to
> a) the type of "name" (I assume it's an ansistring
or unicodestring)
> b) how you free the memory to which mytest points
>

> If you use freemem or reallocmem, then you will get a memory leak
because freemem/reallocmem do not finalize the memory before freeing it.
You have to manually call finalize() on the records inside that memory
block prior to freeing them via freemem/reallocmem. dispose on the other
hand will finalize the freed memory automatically.
> 
>
Jonas_______________________________________________
> fpc-pascal
maillist - fpc-pascal at lists.freepascal.org [2]
>
http://lists.freepascal.org/mailman/listinfo/fpc-pascal [3]

It was an
ansistring indeed, and finalize did the trick! Thanks for your help. How
does New and Dispose work btw? Do they use RTTI to call finalize
appropriatly? I tried searching the New and Dispose implementations in
the RTL sources, but I just could not find them. What unit are they in?


Regards, Darius 

Links:
------
[1]
mailto:dhkblaszyk at zeelandnet.nl
[2]
mailto:fpc-pascal at lists.freepascal.org
[3]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20111218/30588f4e/attachment.html>


More information about the fpc-pascal mailing list