1) Do you/should you always intialize liked list first/last items to NULL before using.
2) If you are supposed to, why hasn't there been more problems before this relating to objects being corrupted/corrupting files or corrupt objects crashing the mud?
Yes, in fact you *should* initialize EVERY variable in your entire codebase to a known value. One of the "features" of the C language is that only a very small set of variables get initialized by default (namely, static global variables).... in Ye Olde Days of 1MHz CPU's, this was great because it didn't "waste" CPU cycles on something that might not matter. It also means that as your project gets larger and larger, it's harder to debug. Setting every variable to a known value makes that debugging easier.
As to why it doesn't crash more often? Luck of the draw.
If your corrupt pointer (filled with random stuff) is written to before it's checked, you're fine. If it gets a value that is wrong, but happens to lie inside your address space -- strange things will happen, but it won't immediately cause a crash. Only if it falls outside your address space, does it generate a segmentation fault (meaning you accessed memory outside your segment set).