程序出错,你回滚了吗?

来源:互联网 发布:生意通流量软件 编辑:程序博客网 时间:2024/06/03 01:39
转载请加注:Qdieyou
请大家观察下以下代码片段:
FILE *fin;
FILE *fout;

fin = fopen("test.txt", "r");
if (fin == NULL) {
    return 0;
}
fout = fopen("good.txt","w");
if (fout == NULL) {
    return 0;
}

两次打开文件都进行了防错设计,但是却忽略了程序回滚,当fout打开文件出错时,在return之前,你是否忘了fin指针还是打开着呢?虽然这些可以在程序return后由系统来关闭,但显式的关闭已打开的资源是一个良好的编程习惯。

经过修改的良好代码如下:
FILE *fin;
FILE *fout;

fin = fopen("test.txt", "r");
if (fin == NULL) {
    return 0;
}
fout = fopen("good.txt","w");
if (fout == NULL) {
  fclose(fin);
    return 0;
}

类似的情况还有很多,比如说,两次申请内存,第二次申请失败,在返回时,记得把第一次申请的空间释放,以免造成内存遗漏。