我試圖做一個基本的wxWidgets程序,不泄漏任何內存(我在Windows 7上開發並且正在使用Visual Studio 2010並嘗試使用CRT來檢查泄漏)。做一個簡單的wxWidgets程序沒有內存泄漏
我從OpenGL示例開始並逐漸處理它。在將CRT調用添加到我的wxApp對象的OnExit方法(只有的地方,我甚至看到它提到過)之後,我意識到內存正在泄漏到處。
我逐漸摸索下來,更直到我創造了這個示例代碼,這使得CRT吐出泄漏的巨大的負荷:
#include <wx/glcanvas.h>
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#ifdef __WXMSW__
#include <wx/msw/msvcrt.h>
#endif
#if !defined(_INC_CRTDBG)// || !defined(_CRTDBG_MAP_ALLOC)
#error "Debug CRT functions have not been included!"
#endif
class App : public wxApp {
public:
bool OnInit(void);
int OnExit(void);
};
bool App::OnInit(void) {
if (!wxApp::OnInit()) return false;
return true;
}
int App::OnExit(void) {
return wxApp::OnExit();
}
int WINAPI WinMain(HINSTANCE h_instance, HINSTANCE h_prev_instance, wxCmdLineArgType cmd_line, int cmd_show) {
int leaks = _CrtDumpMemoryLeaks();
if (leaks) {
int i=0, j=6/i; //Put a breakpoint here or throw an exception
}
return EXIT_SUCCESS;
}
#pragma comment(lib,"wxbase29ud.lib")
#pragma comment(lib,"wxmsw29ud_gl.lib")
#pragma comment(lib,"wxmsw29ud_core.lib")
#pragma comment(lib,"wxpngd.lib")
#pragma comment(lib,"wxzlibd.lib")
#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"rpcrt4.lib")
注意,該類應用程序沒有任何地方使用。類之外的函數定義對於防止它被優化掉是必要的。如果課程App是而不是,則不會發生錯誤。
問題是,爲什麼不能正常工作?我如何製作一個無泄露的wxWidgets程序?我應該如何使用_CrtDumpMemoryLeaks()?爲什麼沒有這方面的資源 - 如果有,它們在哪裏?我能找到的最好的是this,它只建議使用CRT,但實際上並沒有說明如何。幫幫我?
經過多次調整後,我將它整合到以下內容中:http://pastebin.com/EUF6zJ2c。看起來IMPLEMENT_APP不知怎的比我想象的要多。謝謝您的幫助, – imallett 2012-07-11 02:40:12