我不是编程新手,而是C ++的新手。我发现当我玩这种语言并与语言交互时,我会更好地学习。因此,我发现一个很酷的事情是如何让Visual Studio通过以下方式提醒您程序中的任何内存泄漏:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
然后致电
_CrtDumpMemoryLeaks();
在程序退出之前并将所有内存泄漏打印到输出窗口,太棒了!
我的问题是
是的,我知道我应该使用像shared_ptr
,unique_ptr
这样的智能指针,但我这样做是为了学习。这不是一个“真正的”应用程序,只是沙盒测试!
此外,这种查找内存泄漏的方法_CrtDumpMemoryLeaks ()
是否有任何无法准确发现泄漏的情况?这似乎是一个了不起的工具!
答案 0 :(得分:10)
不,内存泄漏在程序中。一旦调试对象终止,VS或调试器与泄漏的内存无关。除非它是内核内存,否则操作系统会在进程终止时释放所有用户模式内存分配。
_CrtDumpMemoryLeaks在许多情况下都没用。一旦案例泄露任何内核内存(在许多情况下都有资格作为句柄泄漏,并且需要Windows上的其他工具)。您可能需要查看WinDbg和相关工具,如GFlags(来自Microsoft网站免费提供的Windows调试工具包),以获得更详尽的诊断内存泄漏/堆损坏等。