1. 程式人生 > >記憶體洩漏及其檢測方法

記憶體洩漏及其檢測方法

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; }

這裡寫圖片描述

執行時,程式會自動觸發斷點到記憶體洩漏的位置。