如何忽略_CrtDumpMemoryLeaks的误报内存泄漏?

Mar*_*lon 11 c++ memory static memory-leaks

似乎只要有静态对象,_CrtDumpMemoryLeaks就会返回一个误报,声称它正在泄漏内存.我知道这是因为它们在main()(或WinMain)函数之后才会被销毁.但有没有办法避免这种情况?我用的是VS2008.

Jim*_*ris 12

我发现如果你告诉它在程序终止后自动检查内存,它会允许考虑所有的静态对象.我使用log4cxx和boost在静态块中做了很多分配,这修复了我的"误报"......

添加以下行,而不是在main()的开头某处调用_CrtDumpMemoryLeaks:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
Run Code Online (Sandbox Code Playgroud)

有关用法和宏的更多详细信息,请参阅MSDN文章:

http://msdn.microsoft.com/en-us/library/5at7yxcs(v=vs.71).aspx


Jus*_*cle 3

这不是一个直接的解决方案,但总的来说,我发现将尽可能多的分配移出静态初始化时间是值得的。它通常会导致令人头痛的问题(初始化顺序、取消初始化顺序等)。

如果事实证明这太困难,您可以在 的开头和 结尾处调用_CrtMemCheckpoint( http://msdn.microsoft.com/en-us/library/h3z85t43%28VS.80%29.aspx )。main()_CrtMemDumpAllObjectsSince