读书人

关于文件输出缓冲区的有关问题

发布时间: 2013-01-01 14:04:19 作者: rapoo

关于文件输出缓冲区的问题
各位大大,如果能帮上忙的话,请帮着分析一下lz遇到的是什么情况

我现在做的程序是个exe带参数的可执行程序,会加载很大的数据文件和输出很大的数据文件,所以需要动态的内存的申请和释放。目前在VS2010下release,debug模式下通过参数来调试,通过观察进程管理器,无论跑多大的文件都没有任何内存问题。

不过这个release过后的程序,一旦拿来被其他程序调用,就会出现内存崩溃的情况。我在跟踪时候发现一个奇怪的现象,内存崩溃来源于写文件,在外部调用这个release的时候,写文件的动作是一直写在缓冲区里,直到所有的写操作结束,才一起写进文件;可是我在调试的时候,却不是这样,确实是一条一条写进了文件。

debug的时候我的程序最多时候也就占用了2M多的内存,但是被其他程序调用,就最多占到了2G多直到崩溃。

至于文件写的部分,我用的是File文件指针,也设置了禁用文件缓冲区(_IONBF),每次写完数据也fflush了,但是这只生效在我的VS环境下,一旦外部调用就不好使。。。

我也尝试了每次写文件都单独的打开或者关闭文件,虽然这样效率很低,但是依旧只在VS环境下文件是实时写入的,一旦外部调用还是写进缓冲区。。。

我也试过用ofstream来写文件,问题还是一样的。。。

请问有大大们有这方面经验的么?能给分析下到底是什么情况么~谢谢
[解决办法]

引用:
我现在做的程序是个exe带参数的可执行程序


我首先想到的是路径问题,即工作目录

VS调试时工作目录是工程文件所在的目录

直接exe执行时,工作目录一般是该可执行文件所在目录

这个问题一般很容易发现和解决,但有时候容易被忽视,最好先排除这个原因

读书人网 >C++

热点推荐