调试fopen和fclose,太多打开的文件

时间:2016-01-31 16:25:31

标签: c fopen fclose

我正在使用Windows 7,使用gcc version 4.8.1进行编译。我有大型的多线程C程序,可以调用fopenfclose。如果运行时间足够长,则会开始无法打开文件。我使用<errno.h>进行了调试,但收到了Too many open files错误,但一次只能打开多个文件。我已经多次查看代码并且找不到错误(对于fopen的每次调用都会执行相应的fclose调用,并且没有函数使用多个{{1}变量)。还有其他调试建议吗?特别是有一个函数返回当前打开的文件数?

1 个答案:

答案 0 :(得分:0)

这是一个经典的&#34;资源泄漏问题。很可能有一个代码路径,文件被打开但没有关闭。错误处理代码路径是常见的嫌疑。您可以在网上搜索&#34;调试资源泄漏c&#34;或类似的。

更容易找到有关跟踪内存资源泄漏的工具的信息(我只是用Google搜索)。您可以使用内存资源泄漏工具通过在每次打开文件时分​​配一小块内存然后在关闭文件时释放内存来解决此问题。如果内存泄漏工具是一个相当不错的工具,如果会为任何泄漏的内存提供堆栈跟踪或源文件/行号。该位置将在您打开的文件旁边。