初學者到C++。Visual C++,MFC應用程序,No Malloc等等:什麼會導致內存泄漏?
我花了8個多小時試圖在這裏找到Google幫助。
(補充說明:我安裝了PurifyPlus的試用版,但由於某種原因,我的應用程序不能運行「內部」)。
我有一個持久性內存泄漏的MFC應用程序。
有一系列的線程作爲:DWORD WINAPI WorkThread(LPVOID LPARAM) 其中的每一個調用線程爲:空隙TradeLogic(CIBTraderDlg * PDLG) 上的計時器。
有一個對話框,其中包含ListView控件。
應用程序中的任何地方都沒有「malloc」或「calloc」調用。 (搜索包括完整的API) 有一個「新」套接字只在程序啓動時執行一次。 「新」沒有動態分配。 當程序啓動時,只有一次文件讀取一次。
但是仍然存在內存泄漏,無限無盡。 (每15秒大約4K字節,儘管不完全一致)
我的程序沒有在調試模式下完全運行。該對話框出現了,但它不會執行任何對遠程服務器時間的調用,因此不會執行關閉此事件的事件(包括更新列表視圖)。
儘管如此,在「Debug」運行如此合格,當我點擊我的「退出」按鈕時,Debug輸出顯示了CRT文件中的消息,但它們並沒有明顯的幫助,因爲根本沒有發生泄漏(他們建議套接字的「新」可能會泄漏,但同樣,套接字只能打開一次)。 Taskmgr確認此限制模式下不發生泄漏。
於是,我跟着MSDN和「退出」順序嘗試下面的代碼:
HANDLE hLogFile;
hLogFile = CreateFile("c:\\log.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ERROR, hLogFile);
_RPT0(_CRT_ERROR,"file message\n");
_CrtDumpMemoryLeaks();
CloseHandle(hLogFile);
exit(0);
並正常運行該程序。但是當我點擊退出時,我只會得到CRT的輸出全部無法檢測的文本「文件信息」。
有人可以指向我可能在代碼中尋找問題的位置嗎?
你有指針,智能指針,線程嗎?你不能使用內存泄漏檢測器(Purify,Valgrind,...) – 2014-12-27 19:11:50
我下載了Purify,但由於某種原因,我的應用程序不能運行。 – cjv 2014-12-27 19:16:55
順便說一句,如果你可以編寫你的Linux應用程序(例如使用[Qt](http://qt-project.org/)...也可以在Windows上編譯),這可能會更簡單 - 因爲Linux有很多的工具來幫助解決這個問題。 – 2014-12-27 19:18:44