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

Reply via email to