内存泄漏查找----------VLD
VLD是VC++ 提供的内存泄漏查找工具 只能用于VC++编译器!
开始
下载地址:https://vld.codeplex.com/releases ,下载完直接安装即可;
我下载的是v2.5.1
安装后就需要配置库文件和头文件;
下面提供在在Qt中,简单配置方式:
找到VDL安装目录下的bin目录下的include(我的路径是 C:\Program Files (x86)\Visual Leak Detector\include)中的头文件全部copy到Qt 编译器(VC++编译器才行)include文件中;(我这里的路径是:C:\Qt\Qt5.9.1\5.9.1\msvc2015_64\include) 再将VDL安装目录下的lib目录中的Win64(64位机)目录中的库文件copy到Qt 编译器中的lib目录中;
配置完成后就可以在代码中添加头文件#include <vld.h>
程序在debug模式下编译的时候会检查内存泄漏 ,如果有编译完会将内容输出到应用程序输出窗口,在release模式不会链接VLD库;
输出内容(没有泄漏):
Visual Leak Detector read settings from: C:\Program Files (x86)\Visual Leak Detector\vld.ini //配置文件位置
Visual Leak Detector Version 2.5.1 installed. //版本信息
No memory leaks detected. //没有检测到内存泄漏
Visual Leak Detector is now exiting. //VLD退出
输出内容(有内存泄漏):
Visual Leak Detector read settings from: C:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 8 at 0x0000000000307B00: 48 bytes ---------- //在这里有泄漏 48 bytes
Leak Hash: 0x1497BE72, Count: 1, Total 48 bytes
Call Stack (TID 1712):
ucrtbased.dll!malloc()
f:\dd\vctools\crt\vcstartup\src\heap\new_scalar.cpp (19): untitled12.exe!operator new() + 0xA bytes
c:\users\administrator\documents\untitled12\mainwindow.cpp (11): untitled12.exe!MainWindow::MainWindow() + 0xA bytes;//说明了泄漏位置,在mainwindow.cpp的第11行,可执行文件是untitled12.exe,在MainWindow()这个函数中泄漏;
c:\users\administrator\documents\untitled12\main.cpp (8): untitled12.exe!main() + 0xC bytes
c:\users\qt\work\qt\qtbase\src\winmain\qtmain_win.cpp (104): untitled12.exe!WinMain() + 0xE bytes
f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (99): untitled12.exe!invoke_main()
f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (253): untitled12.exe!__scrt_common_main_seh() + 0x5 bytes
f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (296): untitled12.exe!__scrt_common_main()
f:\dd\vctools\crt\vcstartup\src\startup\exe_winmain.cpp (17): untitled12.exe!WinMainCRTStartup()
kernel32.dll!BaseThreadInitThunk() + 0xD bytes
ntdll.dll!RtlUserThreadStart() + 0x21 bytes
Data:
18 BA 9E 3F 01 00 00 00 A0 7B 30 00 00 00 00 00 ...?.... .{0.....
D8 BB 9E 3F 01 00 00 00 00 00 CD CD CD CD CD CD ...?.... ........
00 00 00 00 00 00 00 00 D0 7C 30 00 00 00 00 00 ........ .|0.....
Visual Leak Detector detected 1 memory leak (100 bytes). //一共找到了1处内存泄漏的位置
Largest number used: 813 bytes.
Total allocations: 813 bytes.
Visual Leak Detector is now exiting.