メモリをリークしない基本的なwxWidgetsプログラムを作成しようとしています(Windows 7で開発しており、Visual Studio 2010を使用しており、CRTを使用してリークをチェックしようとしています)。
私はOpenGLサンプルから始めて、徐々にそれを減らしていきました。wxAppオブジェクトのOnExitメソッドにCRT呼び出しを追加した後(私がこれまでに言及した唯一の場所)、メモリがどこでもリークされていることに気付きました。
このサンプルコードを作成するまで、徐々に作業を進めていきました。これにより、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はどこでも使用されていないことに注意してください。クラス外の関数定義は、最適化されないようにするために必要です。クラスAppが存在しない場合、エラーは発生しません。
問題は、なぜこれが機能しないのかということです。リークのないwxWidgetsプログラムを作成するにはどうすればよいですか?_CrtDumpMemoryLeaks()はどのように使用すればよいですか?なぜこれに関するリソースがないのですか?もしあれば、どこにありますか?私が見つけた最高のものはこれでした。これはCRTの使用を提案するだけでしたが、実際にはその方法については述べていませんでした。ヘルプ?