int free_master_u(sym_environment *env) { int i; #ifdef USE_SYM_APPLICATION CALL_USER_FUNCTION( user_free_master(&env->user) ); #endif FREE(env->best_sol.xind); FREE(env->best_sol.xval); if (env->mip){ free_mip_desc(env->mip); FREE(env->mip); } if (env->rootdesc){ FREE(env->rootdesc->desc); FREE(env->rootdesc->uind.list); FREE(env->rootdesc->not_fixed.list); FREE(env->rootdesc->cutind.list); FREE(env->rootdesc); } if (env->base){ FREE(env->base->userind); FREE(env->base); } #ifdef COMPILE_IN_TM if (env->warm_start){ free_subtree(env->warm_start->rootnode); if (env->warm_start->cuts){ for (i = env->warm_start->cut_num - 1; i >= 0; i--){ if (env->warm_start->cuts[i]){ FREE(env->warm_start->cuts[i]->coef); } FREE(env->warm_start->cuts[i]); } } FREE(env->warm_start->cuts); FREE(env->warm_start); } #ifdef COMPILE_IN_CP if (env->cp){ for (i = 0; i < env->par.tm_par.max_cp_num; i++){ env->cp[i]->msgtag = YOU_CAN_DIE; cp_close(env->cp[i]); } FREE(env->cp); } #endif #endif return(FUNCTION_TERMINATED_NORMALLY); }
void free_lp(lp_prob *p) { int i; free_prob_dependent_u(p); free_waiting_row_array(&p->waiting_rows, p->waiting_row_num); for (i = p->lp_data->maxn - 1; i >= 0; i--) FREE(p->lp_data->vars[i]); FREE(p->lp_data->vars); #ifdef COMPILE_IN_LP for (i = p->base.cutnum - 1; i >= 0; i--) free_cut(&(p->lp_data->rows[i].cut)); free_node_desc(&p->desc); #else for (i = p->lp_data->m - 1; i >= 0; i--) free_cut(&(p->lp_data->rows[i].cut)); FREE(p->bdesc); #endif FREE(p->lp_data->rows); close_lp_solver(p->lp_data); free_lp_arrays(p->lp_data); if (p->par.lp_data_mip_is_copied == TRUE) { free_mip_desc(p->lp_data->mip); } FREE(p->lp_data->mip); FREE(p->lp_data); #if !(defined(COMPILE_IN_TM) && defined(COMPILE_IN_LP)) free_mip_desc(p->mip); FREE(p->mip); FREE(p->base.userind); #endif FREE(p->best_sol.xind); FREE(p->best_sol.xval); if (p->par.branch_on_cuts){ FREE(p->slack_cuts); } FREE(p->obj_history); FREE(p); }