Visual Studio有專門的插件叫做Visual Leak Detector (VLD)
Visual Leak Detector for Visual C++ 2008/2010/2012/2013
安裝之後,他會給你加入幾個頭檔案和lib,原理可以參考這裡
Visual Leak Detector
使用方法非常簡單,隻需要在你的檢測cpp加上這樣一句話
#include <vld.h>
然後使用debug模式運作,如果有記憶體洩露,會在Output視窗打出詳細的洩露的堆棧,輕按兩下堆棧就可以定位到自己的代碼(我故意加把一個delete注釋掉得到如下截圖)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyY1YWZwQTOx0TZjJXdvN3PnBnauQGafRjZ1UDN2UWY4IjY1QWOwQGO3EDOkFGNjRmYwY2MygjNvwFM18CXt92YucWbphmeuQzYpB3Lc9CX6MHc0RHaiojIsJye.jpg)
==========================================================
clang有一個編譯選項,不知道哪個版本才開始有的。
-fsanitize=address
然後對于下面這段代碼,
int main() {
int *p = new int(100);
return 0;
}
運作會直接出錯.
=================================================================
==18414==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 4 byte(s) in 1 object(s) allocated from:
#0 0x43345b in operator new(unsigned long) (/tmp/a.out+0x43345b)
#1 0x4b8569 in main (/tmp/a.out+0x4b8569)
#2 0x7f909df7803f in __libc_start_main (/usr/lib/libc.so.6+0x2003f)
SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s).
作者:知乎使用者
連結:https://www.zhihu.com/question/26729933/answer/33848182
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。