[fpc-pascal] Is this a reference counting bug?
    Bihar Anwar 
    bihar_anwar at rocketmail.com
       
    Sun May  2 07:59:19 CEST 2010
    
    
  
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.
      
    
    
More information about the fpc-pascal
mailing list