如何检测/避免(非托管)代码中的内存泄漏?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

在非托管C/C++代码中,检测内存泄漏的最佳方案是什么?

过去,我们使用过一种笨的方法:每次内存分配调用和空闲时都会有一个计数器增量。在程序结束时,计数器值应为零。

我知道这不是一个很好的方法,也有一些收获。

提问于
用户回答回答于

如果使用的是Visual Studio,Microsoft提供了一些有用的功能来检测和调试内存泄漏。

这篇文章:msdn.microsoft.com/en-us/library/x98tx3cf(v=vs.140).aspx

首先:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

然后你需要在程序退出时调用它:

_CrtDumpMemoryLeaks();

也可以在程序开始时调用它:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

现在,当程序退出时,所有未被释放的分配将被打印在输出窗口中,以及它们被分配到的文件和分配事件。

用户回答回答于

如果你的C / C ++代码可以移植到* nix,那么很少有东西比Valgrind更好。

扫码关注云+社区