重用文件指针会导致内存泄漏吗?

时间:2011-06-03 19:05:07

标签: c++ file-io memory-leaks fopen fclose

我处理C ++已经有好几年了,所以请耐心等待......

我的程序中存在内存泄漏,导致运行时错误。这会导致错误吗?

我有一个全局变量FILE *fp;

在回调功能中,我有:

fp = fopen(filen,"w");
// do some writing
fclose(fp);

使用相同的指针(fp)重复此过程若干次。使用相同的文件指针有问题吗? fclose()会自动为我释放内存,还是需要手动删除它?如果我正在编写大量文本,是否存在可能导致运行时错误的限制?

谢谢!

4 个答案:

答案 0 :(得分:4)

是的,fclose会释放与FILE *相关联的所有资源。根据经验,仅对使用free分配的内容使用malloc,并仅对使用delete分配的内容使用new

并且您永远不会“重复使用”相同的指针:对fopen的调用将返回新的FILE *

顺便说一句,既然你在做C ++,那么考虑一下fstream。它将为您处理资源管理。

答案 1 :(得分:3)

只要fopen在下一次fclose调用之前始终跟fopen,此方法就不会导致任何内存泄漏。

然而,如果确实发生了这种情况,我会质疑全局变量的必要性。将它作为本地并将其传递给需要输出信息的函数,总体上更安全。

答案 2 :(得分:0)

听起来你正确地做事 - fclose应该反转fopen所做的任何事情,包括释放它可能分配的任何资源。

答案 3 :(得分:0)

多个线程命中同一个全局可能会导致在其中一个线程关闭文件后出现问题。

随后打开文件并在发生时不会看到更改文件指针。

关闭文件只会关闭一个创建的文件句柄,导致文件句柄泄漏,对文件的任何进一步写入都将失败,并且同一句柄上的后续关闭文件试图再次关闭它可能会崩溃,如果它没有写入文件。