C中的FILE指针,动态分配?

时间:2014-07-04 00:40:16

标签: c file

(1)当我在C中使用FILE指针并忘记关闭它时。我的电脑告诉我,这是程序中的内存泄漏。我觉得我们是否为文件指针动态分配堆空间?

3 个答案:

答案 0 :(得分:3)

  1. 我相信fopen函数返回的指针是用malloc初始化的,所以如果没有正确释放它(使用fclose),当程序退出时会出现内存泄漏
  2. 如果你从未使用fopen,则不需要调用fclose。如果你不打算使用fopen,我想不出你需要FILE指针的原因。

答案 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.问题,我不明白你在问什么)