[fpc-devel] Managed Types, Undefined Bhaviour
    Michael Van Canneyt 
    michael at freepascal.org
       
    Sat Jun 30 14:50:52 CEST 2018
    
    
  
On Sat, 30 Jun 2018, Willibald Krenn wrote:
>>> Managed fields of records are "setup" ;)
>>
>> I will add a section about this in the documentation, seeing that people
>> often confuse the 2 concepts.
>
>
> In an ideal world, either the language would not let you write code that has random behavior or the compiler would enforce this.
There is no random behaviour.
>
> procedure global(memo1: TMemo);
> begin
>  A:=X(3);
>  A[0] := 5;
>  A[1] := 4;
>  B:=X(3);
>  // the following will print 5 twice
>  memo1.lines.add('GlobalA0: %d',[A[0]]);
>  memo1.lines.add('GlobalB0: %d',[B[0]]);
B[0] is not initialized. Printing the contents can print anything.
A and B are different arrays, with length 3, The compiler ensures this. 
But their content is not initialized. Printing the content may therefor
result in any possible vallue.
Your code in essence does the same as
Procedure something;
var
   B : Array[0..2] of integer;
begin
   Writeln(b[0]);
end;
And - Lo -  it behaves the same...
Michael.
    
    
More information about the fpc-devel
mailing list