gpt4 book ai didi

c - exit() 会在 _SUCCESS 和 _FAILURE 上释放分配的内存

转载 作者:太空狗 更新时间:2023-10-29 16:46:16 24 4
gpt4 key购买 nike

这是一小段代码,在失败的情况下调用了两次 exit(3)。这些调用会释放 malloc 分配的内存吗?谷歌搜索曾经说过,但更多时候,它并没有...

我应该添加 free() 吗?

另外:哪个更好 if (!word)(它也适用于例如 word == 0,它不同于 word == 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 ? */
}

提前致谢!

最佳答案

是的,所有的内存都归还了。顺便说一句,退出后你想用剩余的内存做什么?
或者您是否担心 exit() 中的内存泄漏?如果内存没有被回收,它会随着每个退出的进程泄漏更多,这是任何可靠的操作系统都无法承受的。所以,除了有问题的操作系统,别再担心内存问题,在任何需要的地方使用 exit()

为了回答代码注释中的问题,是否释放,我认为为每个 malloc 编写相应的 free 是正确的软件工程。如果这看起来很难,则表明您的代码中存在结构性问题。在退出前释放所有内存的好处是,您可以使用 valgrind 等强大的工具来检查代码其余部分中的内存泄漏,不会从您向我们展示的 malloc 中产生误报

请注意,在一个失败 malloc 之后,尝试释放结果是没有意义的——反正它是一个空指针。

第三,我更喜欢 if (pointer == NULL) 而不是 if (!pointer) 但这完全是主观的,我可以阅读和理解两者:-)

关于c - exit() 会在 _SUCCESS 和 _FAILURE 上释放分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com