Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.std.c > #1754

Re: null pointer constant, address constant

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.std.c
Subject Re: null pointer constant, address constant
Date 2012-12-18 15:52 -0800
Organization None to speak of
Message-ID <lnzk1ark9h.fsf@nuthaus.mib.org> (permalink)
References <kapqt2$es4$1@speranza.aioe.org> <kaq01g$6jp$1@dont-email.me> <kaqibr$gj3$1@speranza.aioe.org> <kaqmd8$u9m$1@dont-email.me>

Show all headers | View raw


Shao Miller <sha0.miller@gmail.com> writes:
[...]
> Possibly related, if we have:
>
>    int x = 42;
>    x -= func_asking_user_for_number_and_they_provide_42();
>    char * ptr = (char *) x;
>
> Does 'ptr' contain a null pointer value?

Maybe.

>                                           We know that a null pointer 
> constant can be used to produce a null pointer value, but what about the 
> simple value 0 without the additional properties that an NPC has?  It 
> seems to me that it might be useful to distinguish between the two...

The standard says that a constant arithmetic expression with the value
0, converted to a pointer type, yields a null pointer.  It does *not*
say the same thing about a non-constant arithmetic expression with the
value 0.

Consider a system that represents null pointers as 0xFFFFFFFF
(let's assume for simplicity that all pointer types have the same
representation).  The standard requires `(char*)0` yields a null
pointer, which means the conversion is non-trivial, though it takes
place at compile time.  But any conversion that's *not* required
to yield a null pointer can simply reinterpret the representation.
So `(char*)zero`, where `zero` is a variable whose value is currently
0, would yield a pointer with an all-bits-zero representation,
*not* a null pointer.  On the other hand, `(char*)0xFFFFFFFF`
would (happen to) yield a null pointer value, though it's not a
null pointer constant.

There are myriads of other possible implementations where `(char*)zero`
does not yield a null pointer.  All one really needs to know is that the
standard doesn't define the behavior; concrete (but hypothetical)
examples can be useful in understanding why the standard does or does
not make certain guarantees.

> On x86 with BIOS, physical address 0 would be the first byte of the 
> Interrupt Vector Table.  If we wish to allow access to this as an 
> object, then surely we would want to distinguish that object from a null 
> pointer, which oughtn't to point to any object.

A program that dereferences physical address 0 (which, BTW, is typically
impossible in hosted implementations with virtual memory) most likely
has undefined behavior.  It's perfectly valid for the result of that
undefined behavior to be that it accesses the Interrupt Vector Table.

[...]

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
    Will write code for food.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-18 13:25 +0000
  Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 09:53 -0500
    Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-18 20:06 +0000
      Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 15:39 -0500
        Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-19 00:44 +0000
          Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 20:24 -0500
            Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-19 10:27 +0000
              Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-19 07:15 -0500
              Re: null pointer constant, address constant Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2012-12-21 03:03 +0200
                Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-21 12:13 -0500
                Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2013-01-09 00:44 +0000
                Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2013-01-08 20:21 -0500
                Re: null pointer constant, address constant Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-01-08 20:46 -0500
          Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 20:37 -0500
      Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 16:15 -0500
        Re: null pointer constant, address constant Keith Thompson <kst-u@mib.org> - 2012-12-18 15:52 -0800
          Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 19:12 -0500
            Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 19:51 -0500
          Re: null pointer constant, address constant Keith Thompson <kst-u@mib.org> - 2012-12-18 17:02 -0800
          Re: null pointer constant, address constant "christian.bau" <christian.bau@cbau.wanadoo.co.uk> - 2012-12-20 05:34 -0800
            Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-20 10:33 -0500
              Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-20 12:28 -0500
                Re: null pointer constant, address constant Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 21:13 -0800
              Re: null pointer constant, address constant Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 21:05 -0800
            Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-20 12:17 -0500
            Re: null pointer constant, address constant Keith Thompson <kst-u@mib.org> - 2012-12-20 12:10 -0800
              Re: null pointer constant, address constant Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 21:25 -0800
  Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 14:02 -0500
    Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-18 20:09 +0000
      Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 15:54 -0500
        Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 16:18 -0500

csiph-web