日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

EVC内存检测

發布時間:2025/5/22 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EVC内存检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將以下代碼保存為.h文件,在待檢測的應用中調用它。

1 /***************************************************************** 2 為了使用內存檢測,需要在待檢測代碼中進行以下三步: 3 1. Define _DEBUG #define _DEBUG 4 2. Include "crtdbg.h" #include "crtdbg.h" 5 3. Let your first line in the code be: _CrtSetDbgFlag (ON); 6 ********************************************************************/ 7 #ifndef _CRTDBG_HEADER 8 #define _CRTDBG_HEADER 9 #ifdef _DEBUG 10 11 extern "C" void WINAPIV NKDbgPrintfW(LPCWSTR lpszFmt, ...); 12 struct CrtFileName 13 { 14 unsigned short* _pusCrtName; 15 CrtFileName* _pCrtNext; 16 }; 17 18 struct _CrtMem 19 { 20 CrtFileName* _pCrtFileName; 21 int _iCrtLine; 22 unsigned int _uiCrtMemLen; 23 void* _pCrtMemAddr; 24 _CrtMem* _pCrtNext; 25 }; 26 27 void* operator new(unsigned int s,unsigned short* name,int line); 28 inline void* __cdecl operator new(unsigned int s) 29 { return ::operator new(s, _T(__FILE__), __LINE__); } 30 31 void __cdecl operator delete(void *pvMem); 32 33 class garbageCollector 34 { 35 public: 36 garbageCollector () {} 37 ~garbageCollector (); 38 }; 39 #define _CrtSetDbgFlag(ignore) garbageCollector gb; 40 _CrtMem* _pCrtMemRoot = 0; 41 CrtFileName* _pCrtFileNameRoot = 0; 42 void* operator new(unsigned int s,unsigned short* name,int line) 43 { 44 void* retPtr = malloc (s); 45 if (retPtr) 46 { _CrtMem* _crtMemCell = (struct _CrtMem*)malloc (sizeof(_CrtMem)); 47 _crtMemCell->_iCrtLine = line; 48 _crtMemCell->_uiCrtMemLen = s; 49 _crtMemCell->_pCrtMemAddr = retPtr; 50 _crtMemCell->_pCrtNext = 0; CrtFileName* _tmpCrtFileName; 51 for (_tmpCrtFileName = _pCrtFileNameRoot; 52 _tmpCrtFileName && wcscmp(name, _tmpCrtFileName->_pusCrtName); 53 _tmpCrtFileName = _tmpCrtFileName->_pCrtNext) {} 54 55 if (!_tmpCrtFileName) 56 { unsigned short* _crtName = (unsigned short*)malloc ((wcslen (name) + 1) * sizeof(unsigned short)); 57 wcscpy (_crtName, name); CrtFileName* _crtFileName = (struct CrtFileName*)malloc (sizeof (CrtFileName)); 58 _crtFileName->_pusCrtName = _crtName; 59 _crtFileName->_pCrtNext = 0; if (!_pCrtFileNameRoot) _pCrtFileNameRoot = _crtFileName; 60 else { for (_tmpCrtFileName = _pCrtFileNameRoot; 61 _tmpCrtFileName->_pCrtNext; 62 _tmpCrtFileName = _tmpCrtFileName->_pCrtNext); 63 _tmpCrtFileName->_pCrtNext = _crtFileName; 64 } 65 _tmpCrtFileName = _crtFileName; 66 } 67 _crtMemCell->_pCrtFileName = _tmpCrtFileName; 68 if (!_pCrtMemRoot) { _pCrtMemRoot = _crtMemCell; } 69 else { _CrtMem* _tmpMemPtr; for (_tmpMemPtr = _pCrtMemRoot; _tmpMemPtr->_pCrtNext; _tmpMemPtr = _tmpMemPtr->_pCrtNext); _tmpMemPtr->_pCrtNext = _crtMemCell; 70 } 71 } 72 return retPtr; 73 } 74 75 void __cdecl operator delete(void *pvMem) 76 { if (pvMem) 77 { _CrtMem* _tmpMem; 78 if (pvMem == _pCrtMemRoot->_pCrtMemAddr) 79 { _tmpMem = _pCrtMemRoot; _pCrtMemRoot = _pCrtMemRoot->_pCrtNext; free (_tmpMem); 80 } 81 else 82 { for (_tmpMem = _pCrtMemRoot; _tmpMem->_pCrtNext && (_tmpMem->_pCrtNext->_pCrtMemAddr != pvMem); 83 _tmpMem = _tmpMem->_pCrtNext); 84 if (_tmpMem->_pCrtNext) 85 { _CrtMem* _tmpMem2; 86 _tmpMem2 = _tmpMem->_pCrtNext; 87 _tmpMem->_pCrtNext = _tmpMem2->_pCrtNext; 88 free (_tmpMem2); } 89 else 90 NKDbgPrintfW (_T("%s(%i) : Warning : deletes memory pointer not allocated with new!/n"), _T(__FILE__), __LINE__); 91 } 92 free (pvMem); 93 } 94 } 95 96 garbageCollector::~garbageCollector () 97 { if (!_pCrtMemRoot) NKDbgPrintfW (_T("No memory leaks detected!/n")); 98 else { _CrtMem* _tmpMem; NKDbgPrintfW (_T("Detected memory leaks!/nDumping objects ->/n")); 99 for (_tmpMem = _pCrtMemRoot; _tmpMem; _tmpMem = _tmpMem->_pCrtNext) 100 { 101 NKDbgPrintfW (_T("%s(%i) : normal block at 0x%08X, %i bytes long/n Data <"), _tmpMem->_pCrtFileName->_pusCrtName, _tmpMem->_iCrtLine, _tmpMem->_pCrtMemAddr, _tmpMem->_uiCrtMemLen); 102 103 for (unsigned int i = 0; i < _tmpMem->_uiCrtMemLen; i++) 104 NKDbgPrintfW (_T("%c"), *(((char*)_tmpMem->_pCrtMemAddr)+i)); NKDbgPrintfW (_T(">/n")); 105 } 106 } 107 CrtFileName* _tmpName = _pCrtFileNameRoot; 108 for (;_tmpName;) 109 { _pCrtFileNameRoot = _tmpName->_pCrtNext; free(_tmpName->_pusCrtName); free(_tmpName); _tmpName = _pCrtFileNameRoot; 110 } 111 } #else 112 #define _CrtSetDbgFlag(ignore) #endif //DEBUG #endif //HEADER

?

轉載于:https://www.cnblogs.com/91program/p/5244201.html

總結

以上是生活随笔為你收集整理的EVC内存检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕亚洲一区二区三区 | 日本黄色精品 | 亚洲香蕉视频 | 97视频成人 | 老司机精品福利视频 | 国产成人精品无码免费看81 | 欧美又粗又大xxxxbbbb疯狂 | 中文字幕一区二区在线视频 | 女人免费视频 | 四虎国产在线观看 | 在线五月天 | 高清欧美精品xxxxx在线看 | 国产一区二区在线精品 | 欧美日韩一区二区视频在线观看 | 无码免费一区二区三区 | 国产成人精品网站 | 在线观看特色大片免费网站 | 国产破处av | 天堂成人 | 免费处女在线破视频 | 欧美日韩在线观看成人 | 日韩av一区二区三区在线 | 无码成人精品区一级毛片 | 国产在线一区不卡 | 国产91清纯白嫩初高中在线观看 | 国产精品久久久久99 | 性按摩玩人妻hd中文字幕 | 婷婷午夜精品久久久久久性色av | 美女在线不卡 | 欧美日韩一区二区三区不卡视频 | 免费爱爱网站 | 欧美tv | 青青草伊人 | 亚洲午夜av | 狠狠干性视频 | caopor超碰| 2019年中文字幕| 成片免费观看视频大全 | 九九九色 | 国产小视频在线 | 亚洲视频免费在线 | 国产成人无码aa精品一区 | 久久av一区二区三区亚洲 | 国产在线欧美在线 | 日本国产精品一区 | 国产一区二区三区免费在线观看 | av日韩高清| 清清草免费视频 | 青青草原一区二区 | 亚洲精品国产一区二区 | 欧美日韩精品 | 91丨porny丨对白 | 在线看片一区二区 | 日日躁夜夜躁 | 少妇2做爰bd在线意大利堕落 | 成人精品在线 | 少妇一边呻吟一边说使劲视频 | 久久久久久蜜桃 | www.97超碰 | 精品无码黑人又粗又大又长 | 影音先锋精品 | 国产女人18毛片水真多1 | 日产久久视频 | 久久不卡影院 | 一区二区视频国产 | 黄网站免费看 | 国产 中文 字幕 日韩 在线 | 国产性爱精品视频 | 国产精品秘 | 亚洲va国产天堂va久久 en | 亚洲综合在线成人 | 欧美日韩综合一区二区 | 超碰天堂 | www欧美在线 | 色爱色 | 国产视频综合在线 | 欧美激情 在线 | 乳孔很大能进去的av番号 | 伊人网站 | 国产成人精品一区二区三区在线观看 | 一区二区视频在线播放 | 黑人巨大精品人妻一区二区 | 天天操天天玩 | 老司机深夜福利影院 | 国产suv精品一区二区 | 重口另类 | 九九综合网 | 精品在线一区二区 | 国产精品久久久久久久久久 | 国产盗摄一区二区三区在线 | 欧美日韩一区二区不卡 | 免费视频网站在线观看入口 | 国产中文字幕在线播放 | 国产一区亚洲二区 | 午夜影院在线看 | 日韩少妇毛片 | 精品国产无码一区二区三区 | 日韩欧美不卡视频 | 天堂在线免费视频 |