若有請你enable診斷工具就點擊enable
標籤選擇記憶體使用量
在程式的開始以及結尾設定斷點
F5執行第一次斷在第一行,並點擊擷取快照
F5執行第二次以後再點擊擷取快照
點擊第二次快照上升箭頭旁邊的數字
這個上升的數字跟箭頭不管有沒有leak都會顯示出來,還沒有認真去研究這是代表什麼意義
查看memory leak的buffer
報告會顯示有memory leak的型態以及大小,CL的buffer也可以檢測出來。若沒有leak就不會顯示。
若要尋找memory leak就把code慢慢關掉,重複以上步驟看他還存不存在了。
由於以上方法是使用第一個斷點以及第一個斷點在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