您的位置:首页 > 编程语言 > C语言/C++

Windows API: 调用FindFirstFile之后发生的内存泄漏(未解决)

2015-08-31 18:22 573 查看
看这段正常得不能再正常的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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ windows api