記憶體洩漏及其檢測方法
阿新 • • 發佈:2019-02-07
1、記憶體洩漏的定義
記憶體洩漏指的是在程式裡動態申請的記憶體在使用完後,沒有進行釋放,導致這部分記憶體沒有被系統回收,久而久之,可能導致程式記憶體不斷增大,系統記憶體不足……引發一系列災難性後果。
2、記憶體洩漏的檢測方法
#define CRTDBG_MAP_ALLOC //放在程式最前
#include <iostream>
#include <stdlib.h>
#include <crtdbg.h>
using namespace std;
int main()
{
int *a = new int [10];
int *p = new int[1000];
_CrtDumpMemoryLeaks(); //放在程式最後
system("pause");
return 0;
}
程式執行後在【即時視窗】中可以看到記憶體洩漏的資訊:
{65}和{66}代表了第65、66次記憶體分配操作發生了洩漏,所以根據這兩個資訊,可以定位到記憶體洩漏的位置,可以新增如下程式碼:
#define CRTDBG_MAP_ALLOC
#include <iostream>
#include <stdlib.h>
#include <crtdbg.h>
using namespace std;
int main()
{
_CrtSetBreakAlloc(65);
//_CrtSetBreakAlloc(66); //分別取消註釋即可觸發所有斷點。
int *a = new int [10];
int *p = new int[1000];
_CrtDumpMemoryLeaks();
system("pause");
return 0;
}
執行時,程式會自動觸發斷點到記憶體洩漏的位置。