なんで、
struct name {
 int namelen;
 char *namestr;
};
にしないんだろう?二回malloc/freeするのがイヤってことなのかな。