Larson has the following problem:
 In the first line of runthreads(), de_area[] is defined to be an array of 100 thread_data items (MAX_THREADS is defined to be 100)
 However, de_area[i] is written to, where i ranges from 0 to num_threads, and num_threads could be larger than 100 in this case.
 So the initialization is writing off the end of the array.

Fix the problem by making allocating de_area with new.