社区
C语言
帖子详情
fopen文件后,如果不fclose,程序也不退出会不会内存泄露?
honemay
2010-05-27 03:39:29
我每秒钟都需要写数据到一个文件,我只fopen一次,然后用fputs和fflush来更新文件内容
但我不fclose...是不是缓冲区一直会写而不释放?
...全文
1174
14
打赏
收藏
fopen文件后,如果不fclose,程序也不退出会不会内存泄露?
我每秒钟都需要写数据到一个文件,我只fopen一次,然后用fputs和fflush来更新文件内容 但我不fclose...是不是缓冲区一直会写而不释放?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
honemay
2010-05-27
打赏
举报
回复
[Quote=引用 13 楼 akirya 的回复:]
你要写上千次的话干嘛要打开那么多次,打开一次关闭一次。
[/Quote]
我的做法就是只打开和关闭一次..
这个问题主要是我现在运行过程中产生了内存泄露,自己看代码没找出问题,然后对文件操作不够理解,才以为是没有fclose而产生的问题..
现在解决了!
多谢各位的指点..今天又学到了!!
珍惜生命远离CPP
2010-05-27
打赏
举报
回复
你要写上千次的话干嘛要打开那么多次,打开一次关闭一次。
honemay
2010-05-27
打赏
举报
回复
[Quote=引用 9 楼 tu_lq 的回复:]
既然你是一天一个log文件,一次fclose就够了,只要保证fclose最终可以调用到,不就可以了么?甚至连fflush都不用,除非你马上想看结果,等它缓冲满再输出不也可以么?
[/Quote]
多谢指教。
我每天凌晨的定时器会关闭当前的文件指针,然后再打开新的文件..
我现在用fflush,是因为我对这些操作还不够理解!!
现在看来,我确实不需要fflush
honemay
2010-05-27
打赏
举报
回复
fflush已经清空了缓冲区..
我的程序的内存泄露原来是我自己很隐蔽的一个new既然没释放..
真够隐蔽的!!!
Myth_cn
2010-05-27
打赏
举报
回复
这样是不行的。系统对打开的文件数是有限制的,只打开不关闭的话很快就会达到上限,这时再打开文件就会失败。建议在打开新文件的时候关闭上一次打开的文件
toplinq
2010-05-27
打赏
举报
回复
既然你是一天一个log文件,一次fclose就够了,只要保证fclose最终可以调用到,不就可以了么?甚至连fflush都不用,除非你马上想看结果,等它缓冲满再输出不也可以么?
honemay
2010-05-27
打赏
举报
回复
不可能不fclose就会内存泄露把?
肯定有相关的函数可以把缓冲区清空的,只是我现在正在找..
我对文件操作不是很熟练啊!!学习中。
ex_dijkstra
2010-05-27
打赏
举报
回复
fflush倒是可以满足情况,将缓存里的数据刷新到文件中,但是不fclose肯定会内存泄露吧。。。
honemay
2010-05-27
打赏
举报
回复
我在main里面
sprintf(filename,"./log/lrc.log.%04d-%02d-%02d",p->tm_year+1900, p->tm_mon+1 ,p->tm_mday);
recordFile = fopen(filename, "a+");
然后在writelog函数里写 //这个函数程序运行中,1秒钟会被调用上千次
fputs(recordData, recordFile);//recordData就是需要写入文件的数据
fflush(recordFile);
我的fclose是在一个定时器里写的,因为日志文件一天一个!
honemay
2010-05-27
打赏
举报
回复
我1秒钟可是需要执行上千次的文件写操作!同一个文件!
ex_dijkstra
2010-05-27
打赏
举报
回复
贴代码看看?
honemay
2010-05-27
打赏
举报
回复
但是每次都fopen和fclose不浪费性能么?
那我每1秒钟可是要上千次的fopen和fclose啊?
ex_dijkstra
2010-05-27
打赏
举报
回复
fopen完在程序最后还是要fclose保险吧。。。
1s中fopen、fclose一次确实浪费效率。。。
珍惜生命远离CPP
2010-05-27
打赏
举报
回复
为了安全还是写完就fclose
《C语言深度解析》第9、10章——位操作 /c标准IO、网络编程/线程/链表
本课程主要讲解以下内容:1. 位操作(位运算)2. c语言的标准IO函数3.标准IO与
文件
IO、常见标准IO函数有哪些、
fopen
/
fclose
)、标准io输出函数、标准io输入函数等4.多线程、网络编程、数据库、数据结构、顺序表、链表、单链表、双链表、队列/栈、Linux内核链表
c语言
fclose
导致系统崩溃,c语言中
fopen
之后不
fclose
会
造成内存泄漏问题
原创作品转载请注明出处如果
fopen
之后不fcolse
会
怎样呢?#includeint main() {FILE* fp;fp =
fopen
("record.dat","w");return 0;}这里声明了一个FILE类型的指针,它指向了打开的一个当前目录下的record.dat
文件
。这个过程其实是在内存当中多了一个FILE结构体。这种结构体当中各个字段保存着
fopen
的
文件
的信息。那如果fo...
为什么一定要调用
fclose
函数
为什么一定要调用
fclose
函数 带缓存的
文件
操作是标准C 库的实现,第一次调用带缓存的
文件
操作函数时标准库
会
自动分配内存并且读出一段固定大小的内容存储在缓存中。所以以后每次的读写操作并不是针对硬盘上的
文件
直接进行的,而是针对内存中的缓存的(何时从硬盘中读取
文件
或者向硬盘中写入
文件
有标准库的机制控制)。当缓存区域中的内容达到一定大小时,标准库
会
将该缓存内容刷新到磁盘上,此时才完成
文件
的真正写入。 ...
动手实现内存泄漏检测组件
c/c++没有垃圾回收机制,可能
会
出现内存泄漏 出现原因:内存分配与内存释放,没有做到匹配 1.如何预防内存泄漏? 2.内存泄漏如何解决? 1.如何知道内存泄漏 2.如何定位代码哪一行引起的内存泄漏 如何知道内存泄漏: 每次malloc/calloc/realloc 就 +1 每次free 就 -1 如果正常
退出
,不为0,说明存在内存泄漏 如何定位哪一行引起内存泄漏? 1.c自带的宏,__FILE__、_ FUNCTION _和、__LINE__,可以定位到具体
文件
,函数,哪一行 2.builtin_re
日常知识点之
内存泄露
定位手段(c语言hook malloc相关方式)
日常闲听公开课,又是自己
不
会
的一个知识点,做笔记整理: 如何确定有
内存泄露
问题,如何定位到
内存泄露
位置,如何写一个内存泄漏检测工具? 1:概述
内存泄露
本质:其实就是申请调用malloc/new,但是释放调用free/delete有遗漏,或者重复释放的问题。
内存泄露
会
导致的现象:作为一个服务器,长时间运行,
内存泄露
会
导致进程虚拟内存被占用完,导致进程崩溃吧。(堆上分配的内存) 如何规避或者发现
内存泄露
呢? ===》1:如何检测有
内存泄露
?(除了内存监控工具htop,耗时,效果不明显) ===》2:如何定位
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章