Hello everybody.

I discovered a very strange bug/issue and I don't know how to describe
it best as a bug-report.
(or am I doing something wrong?)
I try: a variable declared within a record, AccessViolates when set
later in code,
if declared at the "wong" place..?..

(environment: linux/i686 - fpc 2.0.0)
look at this small snipplet: (attached full testing.pas source for
reproduction):

//<-snip->
type Teumex_memory = record
     pin          : Tchange_string;
     // amtsbelegung : Tchange_bool;    // <-- leave it here, everything
is ok.
     msn          : array [0..9] of Tchange_string;
     port         : array [0..9] of Tchange_string;
     amtsbelegung : Tchange_bool;    // <-- put it there: Access
violation when amtsbelegung is set
end;
//<-snip->


Best regards
./chrom
program bugtest;

{$mode objfpc}{$H+}

uses classes, sysutils;



type Tchange_string = record
     value: string;
     changed : boolean;
end;

type Tchange_int= record
     value: integer;
     changed : boolean;
end;

type Tchange_bool= record
     value: boolean;
     changed : boolean;
end;

//The internal memory of the eumex (sample)
type Teumex_memory = record
     pin          : Tchange_string;
     
     // amtsbelegung : Tchange_bool;    // <-- leave it here, everything is ok.

     msn          : array [0..9] of Tchange_string;
     port         : array [0..9] of Tchange_string;

     amtsbelegung : Tchange_bool;	// <-- put it there: Access violation when setting
end;



TEumex = class			
        private
                FMemory : Teumex_memory;
        public
               property  Memory  : Teumex_memory read FMemory write FMemory;
end;


var Eumex1      : TEumex;
    ic          : integer;


begin
  Eumex1 := TEumex.create;

  writeln ('setting PIN:');
  Eumex1.Memory.pin.value := '1234';
  Eumex1.Memory.pin.changed := true;

  writeln ('setting amtsbelgegung');
  Eumex1.Memory.amtsbelegung.value := true;   // <-- Access violation, if declared like above
  Eumex1.Memory.amtsbelegung.changed := true;

  for ic:= 1 to 10 do begin
      Eumex1.Memory.msn[ic].value := '';
      Eumex1.Memory.msn[ic].changed := false;
      Eumex1.Memory.port[ic].value := '0';
      Eumex1.Memory.port[ic].changed := false;
  end;


end.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to