[fpc-pascal]RE: The inexplicable overflow.
A.J. Venter
ddt at headrush.co.za
Fri Sep 27 10:03:32 CEST 2002
Hi,
If followed the advice presented and recompiled with range checking and
overflow checking on. My program subsequently caused a near immediate 201
crash.
The compiler issues this warning:
minerunner.pas(95,56) Warning: Mixing signed expressions and cardinals
here may cause a range check error
Line 95 looks like this:
If (level.block[blockX,blockY].what = pit) And
(SDL_Getticks > level.block[blockX,blockY].digtime + 10000)
Then
The code in question steps through the level, looking for pit's (holes dug
by the player) and when it finds them the if statement above is used to
compare the time when the hole was dug with the current time, if more than
10 secconds elapsed the hole is filled up again.
It is interesting that a different problem occurs if I turn on integer
overflow checking and not range checking, the program then fails in
characters.draw (though I cannot determine which character is being drawn
when it happens).
What I would love to do is a line by line step over and execute like you
could in BP, however GDB refuses to step unless you run the program -
which then happens without a pause until the program exits or waits for
input - since the game's input is asynchrounous it never waits for input.
Is there anyway to do this ? So I can step over the code and determine the
exact moment of the errors - which when combined with a few whatches
should allow me to solve them.
TIA
A.J. Venter
--
------------------
"If you can't beat your computer at chess - do what I did. Try kickboxing"
Anonymous
A.J. Venter
www.headrush.co.za
More information about the fpc-pascal
mailing list