This define maps wrappers a variable - which I don't like because in this small context it would definitely appear to be a constant.  I'd rather you manually expand the macro here and assign it to a variable to make it obvious (self documenting code).

http://stackoverflow.com/questions/448844/variable-sized-arrays-in-c indicates that in C99 some types of arrays can be defined with a variable length size which I didn't know about.  I'm not sure the benefits of writing this the current way over simply calling malloc.  The later would be more standard and thus easier to follow.  Either way the memory comes from the free memory pool - just either that of the module or separately from the heap.