Windows API: 调用FindFirstFile之后发生的内存泄漏(未解决)
来源:互联网 发布:土木工程领域大数据 编辑:程序博客网 时间:2024/05/17 09:28
看这段正常得不能再正常的C语言源代码:
bool check_file_exists(LPCTSTR lpFileName){ WIN32_FIND_DATA findFileData = { 0 }; HANDLE hFind = NULL; ULONGLONG fileSize = 0; hFind = FindFirstFile(lpFileName, &findFileData); if (hFind != INVALID_HANDLE_VALUE) { fileSize = findFileData.nFileSizeHigh; fileSize <<= sizeof(findFileData.nFileSizeHigh) * 8; fileSize |= findFileData.nFileSizeLow; FindClose(hFind); } return (fileSize > 0);}
这段代码通过 FindFirstFile 来搜索文件,得以判断文件是否存在。
FindFirstFile是一个很常见的Windows API。见MSDN:FindFirstFile
这段代码居然存在内存泄漏。我们用Visual Studio 2015的Diagnostic Tools来看一下:
进入函数的时候,Allocations是496,但是退出函数的时候Allocation是497,内存没有释放干净。
在执行这一句的时候,Allocation变成了498:
hFind = FindFirstFile(lpFileName, &findFileData);
执行这一句的时候,Allocation变成了497:
FindClose(hFind);
不清楚为什么内存没有释放干净,望指点。多谢!
注:FindFirstFileEx 也存在同样的问题:
hFind = FindFirstFileEx(lpFileName, FindExInfoStandard, &findFileData, FindExSearchNameMatch, NULL, 0);
0 0
- Windows API: 调用FindFirstFile之后发生的内存泄漏(未解决)
- Android内存泄漏(线程造成的内存泄漏与资源未关闭造成的内存泄漏)
- 类型转换后发生的内存泄漏
- Java内存泄漏发生的情况
- Java内存泄漏发生的情况
- Java内存泄漏发生的情况
- Java内存泄漏发生的情况
- 显式调用析构函数发生内存泄漏问题
- 如何解决new了之后因为执行流跳转而导致的内存泄漏的问题
- windows phone 8 xaml/directx3d 切后台纹理未释放导致内存泄漏的问题
- 常用内存泄漏的解决
- windows服务调用Owin写一个http API 报错 调用的目标发生了异常。
- windows服务调用Owin写一个http API 报错 调用的目标发生了异常。
- Windows未公开的API
- java 会不会发生内存泄漏
- Android容易发生内存泄漏的几点
- Android中内存泄漏的发生原因及优化
- ie7 xp下使用CHtmlView浏览网页,出现崩溃及内存泄漏的问题,仅描述现象,未解决
- openstack quick start
- nload安装
- select、poll、epoll之间的区别总结[整理]
- libcurl post上传文件
- Ubuntu下adb 显示insufficient permissions for device,或Eclipse中DDMS设备显示?????
- Windows API: 调用FindFirstFile之后发生的内存泄漏(未解决)
- “男人不坏,女人不爱”说明了什么?
- redis 强制关闭并重启方法
- mysql查看历史执行的sql
- C语言 HTTP上传文件-利用libcurl库上传文件
- 【wechat】微信开发——微信验证与处理请求(关注后推送消息)
- 小组第一次行动成果展示
- 获取当前连接Wifi的手机ip地址
- 恶意程序威胁程度“五芒星”评估法