<p>Am 28.03.2015 06:51 schrieb "Howard Page-Clark" <<a href="mailto:hdpc@talktalk.net">hdpc@talktalk.net</a>>:<br>
><br>
> The following program, compiles and runs as expected using a shortstring declaration in the TExample record.<br>
> Could someone explain how to adapt it to cope with a TExample record containing ansistrings?</p>
<p>[snip]<br>
> procedure TExampleList.Initialize(aCount: integer);<br>
> var<br>
>   i: integer;<br>
>   pex: PExample;<br>
> begin<br>
>   for i:=1 to aCount do begin<br>
>     GetMem(pex, SizeOf(TExample));<br>
// use New(pex) instead of GetMem(...)<br>
>     pex^.Init(Format('Example#%d, Value=%d',[i, Random(100)]));<br>
>     FList.Add(pex);<br>
>   end;<br>
> end;<br>
><br>
[snip]</p>
<p>><br>
> destructor TExampleList.Destroy;<br>
> var<br>
>   i: integer;<br>
> begin<br>
>   for i:=0 to FList.Count-1 do<br>
>     Freemem(FList[i], SizeOf(TExample));<br>
// Use Dispose(PExample(FList[i])) instead of FreeMem(...)<br>
>   FList.Free;<br>
>   inherited Destroy;<br>
> end;<br>
></p>
<p>It's best to always use New/Dispose if you work with records. Use GetMem/FreeMem only if you work with unstructured memory areas or where you don't really know the real size beforehand.</p>
<p>Regards,<br>
Sven</p>