gpt4 book ai didi

visual-c++ - _CrtDumpMemoryLeaks( ) == 1 在第一行代码上?

转载 作者:行者123 更新时间:2023-12-03 23:11:31 25 4
gpt4 key购买 nike

我正在开发一个 MFC Visual C++ 项目。据我了解MSDN ,当存在内存泄漏时,_CrtDumpMemoryLeaks() 应返回 TRUE

注意到它 TRUE 后,我尝试在代码中找到它变为 TRUE 的第一个点。显然,这从一开始就是正确的。如果我单击 F10(单步执行)开始调试程序,并在监 window 口中输入 _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 并不意味着内存泄漏,它意味着堆中存在一些未释放的 block ,这些 block 也可能被程序中的某些指针所指向。这些对象可能由 CRT 启动代码和静态对象构造函数创建。

如果您仍然怀疑 - set an allocation hook并检查对象何时创建。要尽早执行此操作,您需要一个在启动期间构造的对象 - 使用 #pragma init_seg(compiler ) 来实现。

关于visual-c++ - _CrtDumpMemoryLeaks( ) == 1 在第一行代码上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com