关于linux下面资源释放的问题
在C++下面,直接关掉应用程序,可以在析构函数中释放掉资源。最后肯定会调用析构函数。
刚接触Linux下C编程,C程序怎么能保证:当应用程序直接关掉,即Ctrl+C后,如何将申请的资源释放掉呢??
想不出啥好办法了、、请教。
就是如果申请了一块堆空间,怎么样在最后的时候释放掉呢??如何触发??谢谢了
[解决办法]
捕捉到Ctrl+C ,执行释放函数
void handler(int sig){ switch(sig) { case SIGINT:printf("捕捉到CTRL+C信号\n");break; case SIGQUIT:printf("捕捉到CTRL+\\信号\n");break; case SIGTERM:printf("捕捉到CTRL+Z信号\n");break; } print_list(head); free_list(); int err; /*取消线程1*/ err = pthread_cancel(tid1); if(err != 0) { perror("cancle 1 wrong"); exit(0); } /*取消线程2*/ err = pthread_cancel(tid2); if(err != 0) { perror("cancle 2 wrong"); exit(0); } /*取消线程3*/ err = pthread_cancel(tid3); if(err != 0) { perror("cancle 3 wrong"); exit(0); } printf("==============exit...==============\n"); //exit(1);}//信号中断操作void signalset(){ /*Ctrl + C*/ if(signal(SIGINT,handler) == SIG_ERR) { perror("ctrl+c wrong!\n"); exit(0); } /*Ctrl + \*/ if(signal(SIGQUIT,handler) == SIG_ERR) { perror("ctrl + \\ wrong!\n"); exit(0); } /*Ctrl + Z*/ if(signal(SIGTERM,handler) == SIG_ERR) { perror("ctrl + z wrong!\n"); exit(0); }}
[解决办法]
在C++中,你直接关掉应用程序,这个“关掉”动作调用了析构函数
同理,在C中,你把结束处理和“退出”这个动作关联起来就行了
有些情况是没办法的
例如,你直接kill掉线程,不管是C还是C++,都别想有任何结束处理的机会