Am 18.10.2011 11:33, schrieb Sven Barth:
Am 18.10.2011 11:19, schrieb Vincent Snijders:
2011/10/18 Sven Barth<pascaldra...@googlemail.com>:
Am 18.10.2011 11:12, schrieb Sven Barth:

type
TByteArray = array of Byte;

function XlatPrime(): TByteArray;
begin
XlatPrime := TByteArray.Create(
$64, $73, $66, $64, $3b, $6b, $66, $6f,
$41, $2c, $2e, $69, $79, $65, $77, $72,
$6b, $6c, $64, $4a, $4b, $44, $48, $53,
$55, $42, $73, $67, $76, $63, $61, $36,
$39, $38, $33, $34, $6e, $63, $78, $76,
$39, $38, $37, $33, $32, $35, $34, $6b,
$3b, $66, $67, $38, $37
);
end;

Before I forget it: If you use this solution (not the const one) or
you use
"SetLength", you need to free the array using "SetLength(0)" or
"YourArrayVariable := Nil", otherwise you'll have a memory leak. You
must
not do this if you use the const solution.

That is unexpected. Until now, SetLength was used for ansistrings and
dynamic arrays, which didn't have this requirement (unless you messed
with the internals using Move).

Could be that I missed the reference counting of arrays. At least I
always try to "free" my arrays by hand ^^

Yes, seems like I missed the ref counting. See http://www.freepascal.org/docs-html/ref/refsu15.html#x39-430003.3.1

====
As remarked earlier, dynamic arrays are reference counted: if in one of the previous examples A goes out of scope and B does not, then the array is not yet disposed of: the reference count of A (and B) is decreased with 1. As soon as the reference count reaches zero the memory, allocated for the contents of the array, is disposed of.
====

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to