Windows API: 调用FindFirstFile之后发生的内存泄漏(未解决)
2015-08-31 18:22
573 查看
看这段正常得不能再正常的C语言源代码:
这段代码通过 FindFirstFile 来搜索文件,得以判断文件是否存在。
FindFirstFile是一个很常见的Windows API。见MSDN:FindFirstFile
这段代码居然存在内存泄漏。我们用Visual Studio 2015的Diagnostic Tools来看一下:
![](https://img-blog.csdn.net/20150831181826456)
进入函数的时候,Allocations是496,但是退出函数的时候Allocation是497,内存没有释放干净。
在执行这一句的时候,Allocation变成了498:
执行这一句的时候,Allocation变成了497:
不清楚为什么内存没有释放干净,望指点。多谢!
注:FindFirstFileEx 也存在同样的问题:
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);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android Manifest 用法
- 如何重装TCP/IP协议
- 关于指针的一些事情
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- c++ primer 第五版 笔记前言
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- share_ptr的几个注意点
- 微软镜像下载
- windows server域用户提升到本地更高权限组中的方法
- 使用命令修改注册表键值及权限