[問題] 關於CRT detect memory leak
大家好
知識淺薄....
上個月看某人的程式碼 發現奇怪的東西
int tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(tmpDbgFlag);
由於第一次看到...
原來這段code是讓程式在Terminate時 順便印出leak的區塊
例如~
Detected memory leaks!
Dumping objects ->
{148} normal block at 0x00F34E48, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.
我想問的是
{148} 意思是 第幾次malloc memory
改code
_CrtSetBreakAlloc(148) 下次再跑一次就可以設中斷點在這次
但這種東西 用在那種跟user互動阿 或是 多條thread在跑的時候
根本沒辦法確定"148"這個數值, 每次都不一樣....
我想請問各位, 有沒有招式 可以在run time get出 我這次memory alloc是第幾次
例如
int * ptr = new int;
long num = GetMemoryAllocCount();
printf("%d", num);
這樣的話我就可以輕易的在程式結束後
和printf的log做diff
看出是哪次leak了~~
不知道有沒有方法....請各位提供一些查leak的小技巧吧
謝謝
補充在問一下
他都說這是CRT了 所以說各平台C compiler都該支援這種東西嚕?
還有想問一個~~
singleton 一般會開releaseSingleton(){delete this}這種method嗎?
會這樣問是因為 若沒開 我程式結束
CRT會報說 有leak
不知道是不是要開release api給別人去release singleton
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.58.205
※ 編輯: QQ29 來自: 118.163.58.205 (04/17 16:21)
→
04/17 17:59, , 1F
04/17 17:59, 1F
→
04/17 17:59, , 2F
04/17 17:59, 2F
→
04/17 18:36, , 3F
04/17 18:36, 3F
→
04/17 19:43, , 4F
04/17 19:43, 4F
推
04/17 22:36, , 5F
04/17 22:36, 5F
→
04/18 00:27, , 6F
04/18 00:27, 6F
→
04/18 00:28, , 7F
04/18 00:28, 7F
→
04/18 09:56, , 8F
04/18 09:56, 8F
→
04/18 09:57, , 9F
04/18 09:57, 9F
→
04/18 09:57, , 10F
04/18 09:57, 10F
→
04/18 09:58, , 11F
04/18 09:58, 11F
推
04/18 15:25, , 12F
04/18 15:25, 12F
→
04/18 15:26, , 13F
04/18 15:26, 13F
推
04/18 20:50, , 14F
04/18 20:50, 14F
→
04/18 20:51, , 15F
04/18 20:51, 15F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章