2 May 2010 07:59
Is this a reference counting bug?
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@...
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
RSS Feed