我正在开发一个 MFC Visual C++ 项目。据我了解MSDN http://msdn.microsoft.com/en-us/library/d41t22sb%28v=VS.100%29.aspx, _CrtDumpMemoryLeaks()
应该返回TRUE
当出现内存泄漏时。
注意到之后is正确,我试图找到代码中第一个变为正确的点。显然,这从一开始就是正确的。如果我点击F10(单步)开始调试程序,然后输入_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);
}
另外,我推测调试工具可能在此时尚未初始化,并且 TRUE 是错误的。所以我在第一行设置了一个断点OnInitDialog()
函数并且该值也为 TRUE。
为什么我在程序的早期就出现了内存泄漏?
您误解了返回值。TRUE
并不意味着内存泄漏,它意味着堆中存在一些未释放的块,这些块也可能被程序中的某些指针所指向。这些对象可能由 CRT 启动代码和静态对象构造函数创建。
如果你仍然怀疑——设置分配挂钩 http://msdn.microsoft.com/en-us/library/820k4tb8%28VS.80%29.aspx并检查对象何时创建。为了尽早做到这一点,您需要一个在启动期间构造的对象 - 使用#pragma init_seg( compiler )
为了那个原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)