pretty cool, love anything related to C.
might want to add anonymous struct.
also put function pointers inside struct for simple object-oriented-programming in C.
flexible array is handy, you do one malloc for all, but pointers inside struct is more 'flexible', for example you can put a 'void *' and cast it to various data types. for flexible array, the data types must be chosen first.