visual studio mode 设定debug mode开启诊断工具
侦错->视窗->开启诊断工具
若有请你enable诊断工具就点击enable
标籤选择记忆体使用量
在程式的开始以及结尾设定断点
F5执行第一次断在第一行,并点击撷取快照
F5执行第二次以后再点击撷取快照
点击第二次快照上升箭头旁边的数字
这个上升的数字跟箭头不管有没有leak都会显示出来,还没有认真去研究这是代表什么意义
查看memory leak的buffer
报告会显示有memory leak的型态以及大小,CL的buffer也可以检测出来。若没有leak就不会显示。
若要寻找memory leak就把code慢慢关掉,重複以上步骤看他还存不存在了。
注意C++的STL
由于以上方法是使用第一个断点以及第一个断点在heap memory里面的difference作为判断上升的依据,
因此在检查leak时我们必须注意如C++的STL是否跳出生命週期而释放记忆体
如同以下範例std::string s;
在自己的建构函式会去配置记忆体,
而在main结束后才会跳出生命週期,
呼叫解构函式。
因此如果你是如上图的code这样测试,就会显示尚有记忆体未释放。
因此我们只要把code改成如下
#include <iostream>using namespace std;void test(){std::string s;}int main(){printf("start\n");test();printf("end");return 0;}
将你的main code再用一个函式包装起来,断点设在printf("start\n");
以及printf("end");
就可以顺利的检查memory leak而不会显示这些C++的STL了
reference : https://stackoverflow.com/questions/4790564/finding-memory-leaks-in-a-c-application-with-visual-studio