日期:2014-05-16  浏览次数:20767 次

求助 关于 fprintf 是否泄漏内存?
小弟斜了一个程序。我用的是 虚拟机下 arch 0.7。
程序定时写文件,我就用 fprintf 写一个流。
程序中malloc 的内存,都对应 free。
用 free 命令观察 内存情况。发现,会定时少 60 k 内存。没有运行其它程序。
挡注释掉 fprintf 函数后,内存使用就是正常的。
不知道这些内存是不是会在 ,内存不够用时,清理出来,还是泄漏了。
请大家多指教。


------解决方案--------------------
写的是什么流?

是不是先写到内存,定时刷新的
------解决方案--------------------
你用free看的时候,不要只看free这一项,还要注意buffers和cached这两项,这两项相当于缓冲,并不是真正用掉的内存。
 
------解决方案--------------------
你用free看的是系统的空闲页面,对于一个进程来说,是不准确的.即使你不运行你的程序,你不停的free,free值也会发生变化的.

比如,你分配的一段空间,用free释放后,用free查看,空闲空间并不马上变大.虽然你free了,但是系统把它缓冲起来了,预备你下次在调用分配相同大小的空间.


------解决方案--------------------
如cceczjxy所言,free看并不准确,特别是你运行了若干次之后,因为系统本身还有一些后台进程在运行。

你可以看-/+ buffers/cache那一行,就是真实的结果,看上去是少了一些内存。不过不关闭fd不会引起这样的问题,而系统调用和C函数也不会有内存泄漏,你看是否分配了内存没有释放。

如果不放心,可以用memprof工具查看是否有内存泄漏,可以查看帮助,用特定的编译选项编译,再用memprof启动,这样就能知道是否有泄漏。
------解决方案--------------------
使用fnprintf防止内存泄露