[OT] C pointers: BSD versus Linux?

Erik Wikström erik-wikstrom at telia.com
Thu Jun 1 09:46:42 PDT 2006


On 2006-06-01 17:21, walt wrote:
Simon 'corecode' Schubert wrote:
On 31.05.2006, at 20:37, jwatson at xxxxxxxxxxxx wrote:
Style 1:
time_t t*;
time(t);
[...]

Also, style 1 is technically "incorrect" since you never allocated the
memory that t is pointing to before passing it into time().

maybe the compiler on BSD by chance put NULL into "t" and thus made it a
valid parameter?
First, thanks to all who replied!  I've been playing with gdb and I'm
seeing a significant difference between linux and *BSD.
I added a dummy variable to my program, like this:
time_t t*, d;
and then ran the program in gdb.  I printed out t and &d and
compared the two values under *BSD and linux.
What I see in linux is that the two values are miles apart,
but in *BSD they differ by only a few bytes.  I *assume* this
means that in *BSD, t is pointing to a valid memory location
very close to d, whereas in linux t is pointing to some
random number.  Does this seem a reasonable idea?
In general when dealing with uninitialized variables any value is 
"reasonable" since there's no guarantee what their value will be. Thus 
you shall never write an application that depends on the behavior of 
uninitialized variables since this behavior can change between different 
architectures, compilers and OS'es.

In this case the fact that t points to an address near d does not make 
that address valid, since d is allocated on the stack and the only valid 
addresses for t to point to would be a variable on the stack or some 
allocaed area on the heap

Erik Wikström
--
 "I have always wished for my computer to be as easy to use as my
 telephone; my wish has come true because I can no longer figure
 out how to use my telephone" -- Bjarne Stroustrup




More information about the Users mailing list