void be_free(be_node *node) { switch (node->type) { case BE_STR: _be_free_str(node->val.s); break; case BE_INT: break; case BE_LIST: { unsigned int i; for (i = 0; node->val.l[i]; ++i) be_free(node->val.l[i]); free(node->val.l); break; } case BE_DICT: { unsigned int i; for (i = 0; node->val.d[i].val; ++i) { _be_free_str(node->val.d[i].key); be_free(node->val.d[i].val); } free(node->val.d); break; } } free(node); }
void be_free(be_node *node) { if(node == NULL) return; //printf("enter free\n"); //printf("node->type is %d\n",node->type); switch (node->type) { case BE_STR: //printf("BE_STR free\n"); _be_free_str(node->val.s); break; case BE_INT: break; case BE_LIST: { //printf("BE_LIST free\n"); unsigned int i; for (i = 0; node->val.l[i]; ++i) be_free(node->val.l[i]); free(node->val.l); break; } case BE_DICT: { //printf("BE_DICT free\n"); unsigned int i; for (i = 0; node->val.d[i].val; ++i) { //printf("node key is %s\n",node->val.d[i].key); _be_free_str(node->val.d[i].key); be_free(node->val.d[i].val); } free(node->val.d); break; } } //printf("free node\n"); free(node); //printf("leave free\n"); }