Pet*_*rba 11 c malloc free exit
这是一段简短的代码片段,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 ? */
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Jen*_*ens 12
是的,返回所有内存.顺便说一下,退出之后你想用剩余的内存做什么呢?
或者您是否担心内存泄漏exit()?如果内存没有被回收,那么每次退出过程都会泄漏一点,这是操作系统无法承受的.因此,除了有缺陷的操作系统之外,不要再担心内存并exit()在任何需要的地方使用它.
要回答你的代码的注释中的问题,无论是免费的,我会说这是正确的软件工程编写相应的free每malloc.如果这看起来很难,则表明代码中存在结构性问题.在退出之前释放所有内存的好处是,您可以使用像valgrind这样的强大工具来检查代码中其余代码的内存泄漏,而不会出现您向我们展示的malloc的误报.
请注意,在malloc 失败后,尝试释放结果没有意义 - 无论如何它都是空指针.
第三,我更喜欢if (pointer == NULL),if (!pointer)但这完全是主观的,我可以阅读和理解两者:-)