dereferencing null

Peter Alexander peter.alexander.au at gmail.com
Fri Mar 2 01:22:26 PST 2012


On Friday, 2 March 2012 at 04:53:02 UTC, Jonathan M Davis wrote:
> On Friday, March 02, 2012 05:37:46 Nathan M. Swan wrote:
>> Am I correct that trying to use an Object null results in
>> undefined behavior?
>> 
>>      Object o = null;
>>      o.opCmp(new Object); // segmentation fault on my OSX 
>> machine
>> 
>> This seems a bit non-D-ish to me, as other bugs like this throw
>> Errors (e.g. RangeError).
>> 
>> It would be nice if it would throw a NullPointerError or
>> something like that, because I spent a long time trying to 
>> find a
>> bug that crashed the program before writeln-debugging 
>> statements
>> could be flushed.
>
> It's defined. The operating system protects you. You get a 
> segfault on *nix and
> an access violation on Windows.

False.

-----------------------
import std.stdio;

class Foo
{
     final void bar()
     {
         writeln("I'm null!");
     }
}

void main()
{
     Foo foo;
     foo.bar();
}
-----------------------

% dmd test.d -O -release -inline
% ./test
I'm null!
%

-----------------------

You only get an error if there is a memory access involved 
(vtable, member data etc.)



More information about the Digitalmars-d mailing list