|
| Range check error Fra : TRN |
Dato : 10-04-06 01:48 |
|
Drive med litt bits'n'bytes ting her, og jeg får nå da (har IKKE hatt
denne feilen før, selv om ingenting er forandret... 100% lik prosedyre
som alltid) en: "raised exception class ERangeError with message 'Range
check error".
---------------------------------------------------------------------
var
i, p: byte;
begin
....
....
for p:= 0 to 255 do begin
Chn[i].StackID[p].next_pt:= p+1;
Chn[i].StackID[p].prev_pt:= p-1; <-- her stopper den på første
end; (p=0) fordi 0-1 = 255!?
---------------------------------------------------------------------
ok, hvis jeg da gjør variabel p til integer, og typecaster slik:
Chn[i].StackID[p].prev_pt:= byte(p-1);
....funker det helt fint nå..... men det jeg lurer på er hvorfor jeg får
denne feilmedingen!? byte: 0 - 1 er jo lik 255 ?? hva er problemet?
En annen ting er at denne proceduren ikke er forandret på flere uker,
men plutselig i dag fikk jeg denne feilmeldingen.
Noen som kan gi meg noen gode tips, og hvordan en jobber "godt" med
bits'n'bytes ? :)
- TRN
| |
Uffe Kousgaard (10-04-2006)
| Kommentar Fra : Uffe Kousgaard |
Dato : 10-04-06 07:00 |
|
"TRN" <trn@not.mine> wrote in message news:4439ab41$1@news.broadpark.no...
>
> ...funker det helt fint nå..... men det jeg lurer på er hvorfor jeg får
> denne feilmedingen!? byte: 0 - 1 er jo lik 255 ?? hva er problemet?
0-1 = 255 er netop en range error. Hvis du ikke vil have en fejlmelding, så
tilføj {$R-}, {$R+} før og efter linien.
hilsen
Uffe
| |
Carsten (12-04-2006)
| Kommentar Fra : Carsten |
Dato : 12-04-06 13:38 |
|
TRN wrote:
> Chn[i].StackID[p].prev_pt:= p-1; <-- her stopper den på første
> - TRN
Du kan skrive
Chn[i].StackID[p].prev_pt:= (p-1) and 255;
De fleste kompilere gennemskuer dette ved kompilering, og det giver
derfor mindre kode da behovet for runtime check fjernes.
Carsten
| |
TRN (13-04-2006)
| Kommentar Fra : TRN |
Dato : 13-04-06 09:14 |
|
>
> 0-1 = 255 er netop en range error. Hvis du ikke vil have en fejlmelding, så
> tilføj {$R-}, {$R+} før og efter linien.
>
> hilsen
> Uffe
>
>
> Du kan skrive
> Chn[i].StackID[p].prev_pt:= (p-1) and 255;
>
> De fleste kompilere gennemskuer dette ved kompilering, og det giver
> derfor mindre kode da behovet for runtime check fjernes.
>
> Carsten
Takker begge for svarene, de er begge gode.
Men hvis jeg typecaster slik jeg gjorde, vil ikke det være en ganske
optimal rutine for delphi da? å gå fra word til byte krever vel ingen
convertering akkurat?
Jeg skal slå av de runtime checks nå programmet er ferdig, så da er jo
behovet for slike 'converteringer' unødvendig, men fint om jeg skriver
rutinene optimalt, for det er ikke lett å finne igjen all sammen i 10000
linjer med kode :p
- TRN
| |
|
|