On Mon, Nov 14, 2005 at 04:16:43PM -0800, Janis Johnson wrote: > On Mon, Nov 14, 2005 at 11:56:16PM +0100, Gabriel Dos Reis wrote: > > "Michael N. Moran" <[EMAIL PROTECTED]> writes: > > SEGFAULT is not a behaviour defined by the language. It is *just* one > > form of undefined behaviour. If you execute that function, it might > > reformat your harddrive and that woud be fine -- though I know of no > > compiler that does that on purpose. But, the point is that your > > program in erring in the outer space. > > > > | // dereference: access to object > > | // If a is null, then SEGFAULT > > | *a = 0; > > > > Again, that may or may not happen. > > Some operating systems load a page of zeroes at address zero, so the > dereference of a null pointer has no visible effect; a different form > of undefined behavior. DYNIX/ptx did that by default, and I think > that HP-UX does it. I much prefer a segfault.
(I'm about to reveal just how old I am). Actually, there was a time when this was just the way C worked: you got the tape from Bell Labs and ran it on your PDP-11, and people wrote C programs that relied on *NULL returning an all-zero object (sometimes by accident). Every C implementation in the world worked this way at one time. It was the same on early VAX BSD releases, and then a linker option was added to decide whether the zero page was all-zero or inaccessible, and then SEGV became the default but the option (of an all-zero page) was still needed to make old software work. (We're talking 1980-82 time frame here).