C Allocating Two Dimensional Arrays
short answer: change your innermost malloc to a calloc.
long answer provided by the c faq:http://c-faq.com/~scs/cclass/int/sx9b.html
What you need to understand is that C doesn't really have a way to allocate a true multidimensional array. Instead, you just have a pointer to an array of pointers. Treat your data structure as such and you will be fine.