我有一个简单的小程序,可以将一种文件类型转换为另一种。在该程序中有相当多的fprintf()调用(与要转换的文件大小大致成正比)。开始时,没有任何对fflush()的调用。在处理较小文件(<10KB)时,完全没有问题。在较大文件(>40KB)上,当调用fclose()时整个程序崩溃了。
因此,我认为可能是缓冲区填满或其他原因导致的,所以我在大约512次fprintf调用后(每次调用打印8到10个字符),加入了fflush()的调用。但程序仍然在调用fclose()时崩溃。
这就带来了我的问题。应该在什么时候调用fflush()?应该在fprintf输出一定量的数据之后调用吗?还是我漏掉了些什么?
谢谢
顺便说一下,如果有关系的话,我的操作系统是Windows 7(64位),并且我以“a +”模式fopen了输出文件。
因此,我认为可能是缓冲区填满或其他原因导致的,所以我在大约512次fprintf调用后(每次调用打印8到10个字符),加入了fflush()的调用。但程序仍然在调用fclose()时崩溃。
这就带来了我的问题。应该在什么时候调用fflush()?应该在fprintf输出一定量的数据之后调用吗?还是我漏掉了些什么?
谢谢
顺便说一下,如果有关系的话,我的操作系统是Windows 7(64位),并且我以“a +”模式fopen了输出文件。
fprintf
在缓冲区满时应该自动刷新。 - Drew McGowenvalgrind
是您的好朋友。我不知道Windows是否有类似于strace
或truss
的工具。如果您的代码在每次迭代中存在内存泄漏,那么当处理大文件时它崩溃是有道理的,而在处理小文件时则可以幸免于此。但这只是我的猜测,因为我不知道您的代码里面有什么问题。 - alvits