一、实验代码
1 #include <iostream> 2 #include <windows.h> 3 4 int main() 5 { 6 while (true) 7 { 8 int* arr = new int[1024]; 9 std::cout << arr << std::endl; 10 Sleep(1000); 11 } 12 }
可以看出第8行申请了内存,后面没释放,造成内存泄漏。
二、使用 VS 诊断工具
(1)代码跑起来,打开诊断工具(CTRL+ALT+F2),如下
(2) 点击堆分析,然后点击截取快照,
可以看出第8秒左右,while里在堆上开辟了9次内存,每次开辟4096个字节,占总的内存36864个字节,然后双击分配调用堆栈,查看内存泄漏的代码位置。
(3)再次点击截取快照
可以看出相比较第一次快照,第585秒左右时,对象增加了577,内存增加了2363392字节。