(1)当我在C中使用FILE指针并忘记关闭它时。我的电脑告诉我,这是程序中的内存泄漏。我觉得我们是否为文件指针动态分配堆空间?
答案 0 :(得分:3)
答案 1 :(得分:1)
假设您的程序通过从main
返回或通过调用exit()
而终止,则所有打开的文件将自动关闭(并刷新所有输出流)。这在C标准中规定;见N1570第7.21.3节第5段。
在从fclose()
获取的任何FILE*
个对象上明确调用fopen()
是一种很好的做法,但这并非完全必要。
至于你的第二个问题,如果我理解正确,如果你不打电话给fopen()
那么你就不应该打电话给fclose()
。如果通过调用FILE*
或某些类似函数未获得fclose()
至值fopen()
,则将{{1}}传递给{{1}}是错误的。
如果你的程序中有内存泄漏(你怎么知道;你运行valgrind吗?),那么它可能是别的东西。
答案 2 :(得分:0)
fopen()
可能使用动态分配的内存,如果不关闭它,内存将不会被重新启动,而valgrind等工具会将其报告为内存泄漏。
(至于你的2.问题,我不明白你在问什么)