我有这段代码:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
MyEditor myEditor;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
while(true)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
{ break; }
TranslateMessage(&msg);
DispatchMessage(&msg);
myEditor.Update();
}
}
return 0;
}
我想在main()退出后立即运行此函数:
_CrtDumpMemoryLeaks();
原因是,如果我在返回0 行之前调用此函数,则“myEditor”析构函数尚未被调用,而且我收到大量内存泄漏警报。 所以我想在我的课程'析构函数被调用后真的检查是否有任何泄漏之后调用它。
我试过了:
void CheckLeaks(void)
{
_CrtDumpMemoryLeaks();
}
//And inside the Main() block:
atexit(CheckLeaks);
但是没有用(实际上它可能有用,但我的类析构函数可能还没有被调用)。 我知道我可以将我的类放在Main()块中并检查,但是类必须处理来自MessageProc的输入和命令,所以我现在真的需要全局。
操作系统是Windows 7(我发现了一些相关的东西,但它似乎只适用于Linux),IDE是Visual Studio 2012。
我该怎么做?
答案 0 :(得分:0)
虽然我认为这不是一个好主意,但一种方法是创建一个全局对象并在其析构函数中添加代码。
一般而言,您应该尽可能使用RAII原则来避免内存泄漏问题。