[問題] 關於CRT detect memory leak

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間13年前 (2013/04/17 16:05), 編輯推噓3(3012)
留言15則, 7人參與, 最新討論串1/1
大家好 知識淺薄.... 上個月看某人的程式碼 發現奇怪的東西 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
可以在 malloc 時紀錄 backtrace, 然後程式離開時印出所有
04/17 17:59, 1F

04/17 17:59, , 2F
memory leak 跟其 back trace 出來
04/17 17:59, 2F

04/17 18:36, , 3F
Visual Leak Detector可以印call stack
04/17 18:36, 3F

04/17 19:43, , 4F
only in microsoft Visual Studion
04/17 19:43, 4F

04/17 22:36, , 5F
不要用singleton
04/17 22:36, 5F

04/18 00:27, , 6F
同意 littleshan, singleton in C++ is like hell, 如果真要
04/18 00:27, 6F

04/18 00:28, , 7F
http://0rz.tw/IbouU 或去念 (應該是) Modern C++ Design
04/18 00:28, 7F

04/18 09:56, , 8F
請問一下為啥只有C++不建議用singleton(multi thread?)
04/18 09:56, 8F

04/18 09:57, , 9F
可是有些東西就真的是一個單一的service或是utility
04/18 09:57, 9F

04/18 09:57, , 10F
不用singleton用static method也應該是一樣的東西啊
04/18 09:57, 10F

04/18 09:58, , 11F
有替代方案嗎? 還是寧可做成可以多個instance也不要singleton
04/18 09:58, 11F

04/18 15:25, , 12F
不只是C++,scwg的連結有一篇不要用singleton的理由
04/18 15:25, 12F

04/18 15:26, , 13F
04/18 15:26, 13F

04/18 20:50, , 14F
delete singleton + multi-threads = 難解。解法參考 how to
04/18 20:50, 14F

04/18 20:51, , 15F
kill a singleton.
04/18 20:51, 15F
文章代碼(AID): #1HRbVE5O (C_and_CPP)
文章代碼(AID): #1HRbVE5O (C_and_CPP)