C 有条件无堆
所以,我有这种情况。一个终止处理程序和一些指向先前在堆上分配的结构的指针 我想做的是使用处理程序有选择地释放它们:对于每个指针,如果对应的结构是alloc,则必须释放。我使用一些整数(1指针->1整数)来控制每个指针状态(alloc'd或free),并确定处理程序是否必须释放 这是密码C 有条件无堆,c,malloc,conditional,free,C,Malloc,Conditional,Free,所以,我有这种情况。一个终止处理程序和一些指向先前在堆上分配的结构的指针 我想做的是使用处理程序有选择地释放它们:对于每个指针,如果对应的结构是alloc,则必须释放。我使用一些整数(1指针->1整数)来控制每个指针状态(alloc'd或free),并确定处理程序是否必须释放 这是密码 /*HEAP STATUS GLOBAL VARIABLES (1 => free required)*/ int free_addrinfo, free_up_rcvd, free_rc_rcvd, fr
/*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。当您已经有了一个自然指针时,没有理由保留一个单独的指示器来表示指针已初始化
实际上,实际上,我会尝试以这样一种方式编写代码,即永远不会怀疑何时需要释放指针。但是当不可能的时候,空检查就足够了。我应该手动设置它还是
free
在指针上设置空值<代码>{/*…*/free(usr_rec);usr_rec=NULL;/*…*/}但是终止处理程序可以随时启动。我不能用任何其他方式来管理它!当然,在调用free
之后,您必须将指针设置为NULL
。好的,现在它看起来更优雅了!谢谢甚至不需要检查NULL。free(NULL)在C标准中保证不做任何事情,所以只要将它们全部释放,不管它们是否已分配。