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