所以,我有这种情况。终止处理程序和指向堆上先前分配的结构体的指针。
我想做的是使用处理程序选择性地释放它们:对于每个指针,如果相应的结构体被分配,必须是自由的。我使用一些整数(1指针-> 1 int)来控制每个指针的状态(分配或释放),并确定处理程序是否必须释放。
下面是代码
/*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);
}
有更聪明的解决方案吗?提前感谢大家!
我只是在初始化时将变量设置为NULL,并在它们被释放时再次将它们重置为NULL。当你已经有一个指针初始化时,没有理由保留一个单独的指示符。
实际上,在现实中,我会尝试以这样一种方式编写代码,即永远不会怀疑何时需要释放指针。但是当不可能的时候,NULL检查就足够了。