C Interview Questions and Answers

 

This program runs perfectly on one machine ...

This program runs perfectly on one machine, but I get weird results on another.
Stranger still, adding or removing a debugging printout changes the symptoms.



Lots of things could be going wrong; here are a few of the more common things to
check:



* uninitialized local variables



integer overflow, especially on 16-bit machines, especially of an intermediate result
when doing things like a * b / c



* undefined evaluation order



* omitted declaration of external functions, especially those which return something
other than int, or have ``narrow'' or variable arguments



* dereferenced null pointers



* improper malloc/free use: assuming malloc'ed memory contains 0, assuming
freed storage persists, freeing something twice, corrupting the malloc arena



* pointer problems in general



* mismatch between printf format and arguments, especially trying to print long
ints using %d



* trying to allocate more memory than an unsigned int can count, especially on machines
with limited memory



* array bounds problems, especially of small, temporary buffers, perhaps used for
constructing strings with sprintf



* invalid assumptions about the mapping of typedefs, especially size_t



* floating point problems



* anything you thought was a clever exploitation of the way you believe code is
generated for your specific system





Proper use of function prototypes can catch several of these problems; lint would
catch several more.

Posted by:Richards