通過define _CRTDBG_MAP_ALLOC宏來檢測windows上的code是否有記憶體泄露

來源:互聯網
上載者:User

VS中內建了記憶體泄露偵查工具,若要啟用記憶體泄露檢測,則在程式中包括以下語句:

#define _CRTDBG_MAP_ALLOC#include <crtdbg.h>

它們的先後順序不能改變。通過包括 crtdbg.h,將malloc和free函數映射到其”Debug”版本_malloc_dbg和_free_dbg,這些函數將跟蹤記憶體配置和釋放。此映射只在調試版本(在其中定義了_DEBUG)中發生。#define語句將CRT堆函數的基版本映射到對應的”Debug”版本。

測試代碼如下:

#include <iostream>#ifdef _DEBUG#define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif#ifdef _DEBUG#define _CRTDBG_MAP_ALLOC#include <crtdbg.h>#define new DEBUG_CLIENTBLOCK#endifvoid test_c(){int* p = (int*)malloc(10 * sizeof(int));//free(p);}void test_cpp(){int* p = new int[10];//delete [] p;}int main(){_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);//_CrtDumpMemoryLeaks();_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);test_c();test_cpp();std::cout << "ok" << std::endl;}
結果圖如下:


GitHub:https://github.com/fengbingchun/Messy_Test

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.