做两个_SUCCESS和_FAILURE退出()免费分配的内存(does exit() free a

2019-07-31 04:13发布

这个代码一小段,以两次调用exit(3)在故障的情况下。 难道这些调用释放内存由malloc的分配呢? 谷歌搜索一次说这样做,甚至更多次,它不...

我要补充的free()?

另外:这是更好的if (!word)它也将工作如字== 0这是从字== NULL不同的,所以我想这是错误的。),或者if (word == NULL)

char *word = NULL, *temp = NULL;
    word = (char *)malloc(sizeof(char) * size);

    if (!word) {            /* or maybe rather it should be (word == NULL)  */
        perror("malloc fail");
        if (fclose(fp)) {
            perror("fclose fail");
            exit(3);                            /* exit without free ? */
        }
        exit(3);                                /* exit without free ? */
    }

提前致谢!

Answer 1:

是的,是返回的所有记忆。 顺便说一句,你想什么,反正退出后,用剩的记忆呢?
或者,您担心内存泄漏exit() 如果内存不回收,它会泄露更多的每个出过程,这点是没有可信的OS能买得起。 因此,除了马车操作系统,不用担心内存和使用exit()无论你需要它。

要回答你的代码的注释中的问题,无论是免费的,我会说这是正确的软件工程编写相应的free与每一个malloc 。 如果出现硬,它指向代码中的结构性问题。 在退出之前释放所有内存的好处是,你可以使用像Valgrind的功能强大的工具在你的代码的其余部分,以检查内存泄漏,而不需要您已经证明我们的malloc 误报

需要注意的是一个失败的malloc后有在试图释放的结果是没有意义的-这是一个空指针反正。

第三,我宁愿if (pointer == NULL)以上if (!pointer) ,但是这完全是主观的,我能看懂这两个:-)



Answer 2:

打完电话后exit你以后malloc和朋友,但OS回收一切。 想象malloc为OS和您的过程之间的中介方便。



Answer 3:

刚一说明,在这些2调用退出你有 - 你有没有分配任何内存,因此释放该指针将是非常没有意义的(以及可能会崩溃,这取决于你的C运行时系统是多大)。

所以,不,你不应该释放它,因为它不存在。

我不得不说,在这样的一个致命错误的情况下,你可能不希望打扰释放内存。

但是,如果你的程序正常退出,是的,你应该尝试释放所有已分配的内存。 这可以是相当棘手有时。



Answer 4:

当你退出程序,所有分配的内存由操作系统(包括栈和堆)中回收。 你的程序不留在RAM中的任何足迹,除非你通过缓冲区溢出和这种程序的内存之外工作。



文章来源: does exit() free allocated memory on both _SUCCESS and _FAILURE
标签: c malloc free exit