条件堆免费

时间:2013-04-17 07:05:10

标签: c malloc conditional free

所以,我有这种情况。终止处理程序和一些先前在堆上分配的结构的指针。

我想要做的是使用处理程序有选择地释放它们:对于每个指针,如果对应的结构被分配必须是空闲的。我使用一些整数(1指针 - > 1 int)来控制每个指针状态(alloc'd或free)并确定处理程序是否必须释放。

这是代码

/*HEAP STATUS GLOBAL VARIABLES (1 => free required)*/
int free_addrinfo, free_up_rcvd, free_rc_rcvd, free_rc_rspn;

/*HEAP POINTERS*/
struct addrinfo *result;
USR_PSW *up_rcvd;
TBOOK_RECORD *rc_rcvd, *rc_rspn; 

void termination_handler(){
    close(sock_ds);
    close(acc_sock_ds);
    if(free_addrinfo) freeaddrinfo(result);
    if(free_up_rcvd) free(up_rcvd);
    if(free_rc_rcvd) free(rc_rcvd);
    if(free_rc_rspn) free(rc_rspn);
   _exit(EXIT_SUCCESS);
}

有更聪明的解决方案吗?谢谢大家!

1 个答案:

答案 0 :(得分:2)

我只是在初始化时将变量设置为NULL,并在释放时将它们重新设置为NULL。没有理由保留一个单独的指示器,指示当你已经有一个指针时,指针被初始化。

实际上,实际上,我会尝试以这样一种方式编写代码,即对指针何时需要释放毫无疑问。但是当不可能时,NULL检查就足够了。