Prince Riley wrote:
Frank,
I think the crux of the matter here is how to make the distinction
between a pointer with 'no value' and one that is initialized or set to
the 'lowest possible value in the range'. The quote I mentioned comes
directly from Borland's Object Pascal Langage Manual
"The reserved word nil is a special constant that can be
assigned to any pointer. When nil is assigned to a pointer, the
pointer doesn't reference anything."
I'm only quibbling with the equation of "doesn't reference anything"
with "lowest possible value in the range". On many architectures, a
pointer value of 0 might be a reasonable choice for "doesn't reference
anything" because the CPU has interrupt vectors there, or uses address 0
for something else. But my point is that this is not guaranteed. Nil
might not even point to valid data memory.
You can check on this, but when I looked it up the 'nil' constant in a
Object Pascal Language reference and what the reserved word 'nil' , a
special constant, means in terms of pointer value (it's not an address)
I was not able to find and what adding/subtracting/multiplying it by a
literal numeric value (or another valid pointer value) to 'nil' would
create.
But I'm more puzzled by what it would /mean/. In spite of your bracketed
comment here, you seem to be thinking that nil is an address: i.e.
adding/subtracting/multiplying a literal would mean something. I'm just
pointing out that, if you think it's an address, it's undefined. Because
it's not any address. So adding something to it doesn't mean anything.
...
If you
then set another breakpoint on the next instruction,
p := p + 1;
you'll notice that the first thing that happens is 'p' get set to a
valid segment address and then the offset, and not the base segment, is
incremented by a value of '1' (again on a Intel CPU machine).
Yup, GIGO.
FP
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal