[fpc-pascal] records - really a bug?
Florian Klaempfl
florian at freepascal.org
Wed May 25 12:06:43 CEST 2005
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 at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list