[fpc-devel] open array and address of "@" / crash, why?

Martin Frb lazarus at mfriebe.de
Sun Mar 30 15:24:46 CEST 2014


The below program compiles fine (and generates no warning (fpc 2.6.2 / 
win 32)

"c" is an open array. But there is no warning when assigning the 
[address of c] to a [pointer to dyn array].

Assuming that type safety checks are performed, I would expect a working 
pointer. But it does not. The pointer point directly to the 1st element 
of the array. So using it a pointer to a dyn-array, crashes.

So what should happen?
- Should this code work?
- Should this code give a compile error?
- ?



program project1;
type
   TA = array of integer;
   PA = ^TA;
var
   a : array of integer;
   a1: PA;

procedure Foo(var c: array of integer; var c1: PA);
begin
   c1:= @c;

   writeln(PInteger(c1)^);  // writes 100
   writeln(c1^[1]);   //crash
   readln;
end;

begin
   SetLength(a,5);
   a[0]:= 100;
   a[1]:= 101;
   a1:=@a;
   foo(a,a1);
end.




More information about the fpc-devel mailing list