chromdildo wrote: Well, in your program :) Compile with range checking ot see it.
> 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 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal