在Visual Studio 2012中执行C++程序后,内存泄漏是否仍然存在?

Jon*_*han 5 c++ memory-leaks visual-studio-2012

我不是编程新手,而是C++的新手.我发现当我玩这种语言并与语言交互时,我会更好地学习.所以我发现的一件很酷的事情就是如何让Visual Studio通过以下方式提醒您程序中的任何内存泄漏:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h> 
Run Code Online (Sandbox Code Playgroud)

然后打电话

_CrtDumpMemoryLeaks();
Run Code Online (Sandbox Code Playgroud)

在程序退出之前它将所有内存泄漏打印到输出窗口,太棒了!

我的问题是

  • 发现内存泄漏后,是否需要重新启动Visual Studio 2012?
  • 我需要重新启动计算机吗?
  • 这些东西多久都会泄露?或者Windows在执行结束时清理所有内存?如果这是真的,那么在Visual Studio中以"调试模式"运行程序是否仍然如此?

是的,我知道我真的应该使用智能指针一样shared_ptr,unique_ptr等等,但我这样做是有目的的学习.这不是一个"真正的"应用程序,只是沙盒测试!

此外,这种查找内存泄漏的方式_CrtDumpMemoryLeaks ()是否有任何无法准确发现泄漏的情况?这似乎是一个了不起的工具!

Chu*_*dad 10

不,内存泄漏在程序中.一旦调试对象终止,VS或调试器与泄漏的内存无关.除非它是内核内存,否则操作系统会在进程终止时释放所有用户模式内存分配.

_CrtDumpMemoryLeaks在许多情况下都没用.一旦案例泄漏任何内核内存(在许多情况下都有资格作为句柄泄漏,并且需要Windows上的其他工具).您可能需要查看WinDbg和相关工具,如GFlags(来自Microsoft网站免费提供的Windows调试工具包),以获得更详尽的诊断内存泄漏/堆损坏等