Почему Application Verifier не может обнаружить утечки памяти?
Я использую Windows 10 Application Verifier, x64 версии 10.0.10586. В нем установлены все флажки "Основы", в том числе "Утечка". Любопытно, что Application Verifier реализует кучу защищенной страницы для памяти, так как вызов malloc возвращает память в конце страницы.
Код DLL:
extern "C" __declspec(dllexport) void LeakMemory()
{
malloc(1);
VirtualAlloc(nullptr, 4096, MEM_COMMIT, PAGE_READWRITE);
}
основной код:
#include <Windows.h>
#include <crtdbg.h>
int main(int, char**)
{
//_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
HMODULE h = LoadLibraryW(L"DLLProject.dll");
void(*pLeakMemory)() = reinterpret_cast<void(*)()>(GetProcAddress(h, "LeakMemory"));
pLeakMemory();
FreeLibrary(h);
printf("bye\n");
return 0;
}
Вывод следующий:
Page heap: pid 0xFE8: page heap enabled with flags 0x3.
AVRF: ConsoleApplication4.exe: pid 0xFE8: flags 0x81643027: application verifier enabled
bye
The program '[11172] TestProject.exe' has exited with code 0 (0x0).
Верификатор приложения не может сообщить об утечке.
Если я включаю вызов _CrtDbgFlag, то проверяет, что на самом деле утечка malloc, также печатая это при завершении работы приложения:
Detected memory leaks!
Dumping objects ->
{74} normal block at 0x0000015C0979EFF0, 1 bytes long.
Data: < > CD
Object dump complete.
Почему не работает Application Verifier? Также не удается найти утечки, если я выделяю память в main() вместо DLL, но я думаю, что это известное ограничение.