Visual c++ _第一行代码上的CrtDumpMemoryLeaks()==1? 我正在研究一个MFC VisualC++项目。据我从中了解,\u crtdumpmomeryleaks()在内存泄漏时应返回TRUE

Visual c++ _第一行代码上的CrtDumpMemoryLeaks()==1? 我正在研究一个MFC VisualC++项目。据我从中了解,\u crtdumpmomeryleaks()在内存泄漏时应返回TRUE,visual-c++,mfc,memory-leaks,Visual C++,Mfc,Memory Leaks,在注意到为真后,我试图在代码中找到第一个变为真的点。显然,这从一开始就是正确的。如果我单击F10(单步执行)开始调试程序,并在“监视”窗口中输入\u CrtDumpMemoryLeaks(),它甚至在程序入口点的第一行代码之前显示TRUE: extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLi

在注意到真后,我试图在代码中找到第一个变为真的点。显然,这从一开始就是正确的。如果我单击F10(单步执行)开始调试程序,并在“监视”窗口中输入
\u CrtDumpMemoryLeaks()
,它甚至在程序入口点的第一行代码之前显示TRUE:

extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                _In_ LPTSTR lpCmdLine, int nCmdShow)
#pragma warning(suppress: 4985)
{
    // call shared/exported WinMain
    return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
另外,我推测可能调试工具在那一点上没有初始化,而事实是错误的。因此,我在
OnInitDialog()
函数的第一行设置了一个断点,该值也是真的


为什么我会在程序的早期出现内存泄漏?

如果在静态初始化过程中(在调用winmain之前)有内存分配,那么这些将显示为内存泄漏


您可以尝试在HeapAlloc()上放置断点-您可能会看到它在winmain之前被命中。

C++在调用main()方法(如果是这样的话,也可以在winmain)之前初始化静态对象


你在什么地方有静态物体吗?您是否使用Singleton来初始化一些从未释放的对象?您是否使用了一些可以在背后实现这一点的框架?

您误解了返回值
TRUE
并不意味着内存泄漏,它意味着堆中有一些未释放的块,这些块可能会被程序中的一些指针指向。这些对象可能由CRT启动代码和静态对象构造函数创建

如果您仍然怀疑,请在创建对象时检查。要尽早完成这项工作,您需要在启动期间构造一个对象—为此,请使用
#pragma init_seg(编译器)