What makes Dwarf Fortress umplayable are the many crashes. Some are deterministic, some happen randomly, and the worst happen while saving. The Bugtracker Forum refuses any report on a nondeterministic crash, because you cannot bring a savefile for that.
If that happens, shall we upload (or Post) the DrWatson32 crashlog to help ? From the Offending adress, and the Listing, that Tarn Adams should have, he should be able to find the offending funktion, and from the diassembled code it should be able to find the exact command that caused it, and fix the bug. Most likely, the funktion was called with a wrong parameter, but he could add code to intercept that and make the programe more failsafe.
DrWatson32 is a Programe that comes with Windows, that intercepts processor interupts and stores a logfile at the following place :
<Systemdrive>:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Dr Watson\DRWTSN32.LOG
You also get a coredump, but that is probably too large too upload.
If it isn't running automatically (dempends on OS version), you can start it by executing :
<Systemdrive>:\WINDOWS\system32\DRWTSN.EXE
It appears, that most crashes have the following format:
1. Something acesses a dangling Pointer. This is no Problem yet, as the Memory that onced belonged to the programe still belongs to the programe.
2. It reads another Pointer of an offset towards the pointer
3. It acceses the second pointer, that contains rubbish or zero and causes a segfault.
In C this should be a pointer to a structure, that contains a pointer. So checking Pointers read from pointers for NULL or values out of the programe memory adresses should help. Note, that in C++, Objects are often pointers, that don't look obviously like pointers, so using the & Operator on objects or rewriting library classes that dynamically allocate memory might be necessary.