【发布时间】:2012-07-05 23:17:53
【问题描述】:
我正在尝试制作一个不会泄漏任何内存的基本 wxWidgets 程序(我正在 Windows 7 上进行开发,并且正在使用 Visual Studio 2010 并尝试使用 CRT 来检查泄漏)。
我从 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 类没有在任何地方使用。类外部的函数定义对于防止它被优化是必要的。如果类 App 不存在,则不会发生错误。
问题是,为什么这不起作用?如何制作无泄漏的 wxWidgets 程序?我应该如何使用 _CrtDumpMemoryLeaks()?为什么没有这方面的资源——如果有,它们在哪里?我能找到的最好的是this,它只建议使用CRT,但实际上并没有说明如何使用。帮忙?
【问题讨论】: