func_a(){
 aroot = (struct A *)calloc(1, sizeof(struct A));
 alist = aroot;
の辺りも意味不明だな