/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407936
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste