I found that the last element of a dynamic array starts with reference count = 2 in FPC, but in Delphi is 1. Is this an FPC bug, or FPC implements reference counting differ from Delphi?
type PAnsiRec = ^TAnsiRec; TAnsiRec = packed Record Ref, Len : SizeInt; First : Char; end; const AnsiRecLen = SizeOf(TAnsiRec); FirstOff = SizeOf(TAnsiRec) - SizeOf(Char); procedure Test; var a: array of ansistring; begin SetLength(a, 5); a[0] := IntToStr(0); a[1] := IntToStr(1); a[2] := IntToStr(2); a[3] := IntToStr(3); a[4] := IntToStr(4); WriteLn('a[0] = ', PAnsiRec(Pointer(a[0]) - FirstOff)^.Ref); // Ref Count = 1 WriteLn('a[1] = ', PAnsiRec(Pointer(a[1]) - FirstOff)^.Ref); // Ref Count = 1 WriteLn('a[2] = ', PAnsiRec(Pointer(a[2]) - FirstOff)^.Ref); // Ref Count = 1 WriteLn('a[3] = ', PAnsiRec(Pointer(a[3]) - FirstOff)^.Ref); // Ref Count = 1 WriteLn('a[4] = ', PAnsiRec(Pointer(a[4]) - FirstOff)^.Ref); // Ref Count = 2, why??? end; begin Test; ReadLn; end. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal