解决通过新声明分配的内存泄漏

时间:2011-03-03 19:50:47

标签: c++ visual-studio-2010 memory-leaks memory-management

有没有办法跟踪通过 new 语句分配的未释放的内存块?未发布的内存信息应列在应用程序出口,包含文件名文件行。这样,应该可以快速识别导致内存泄漏的 new 语句。

如果我是正确的,MFC已经 DEBUG_NEW 定义了这项工作。但是非MFC C ++应用程序呢?

使用的环境:Visual Studio 2010和Windows 7 64位。

2 个答案:

答案 0 :(得分:2)

Visual Studio CRT有一些函数可以帮助您在调试版本中找到内存泄漏,请阅读http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.80%29.aspx以获取更多信息;有很多东西需要考虑。

通常认为最佳做法是尝试始终使用shared_ptr类自动管理内存。如果您没有使用shared_ptr,请考虑开始。

答案 1 :(得分:1)

有很多工具可以帮助您跟踪内存泄漏。所有这些都有其优点和缺点。

大多数工具的最大缺点是它们不会以自动方式向您显示泄漏。您明确必须在应用程序的生命周期内将内存状态转储到文件,然后稍后再次转储状态,然后比较这两种状态。这对开发人员来说很难。

Visual Leak Detector是更好的工具之一(在我看来)。它会自动记录应用程序末尾的所有泄漏,包括调用堆栈。请注意,Microsoft C运行时也可以记录泄漏,但是在没有调用堆栈的情况下执行此操作。

我个人最喜欢的是简单地进行自己的记忆管理。实现全局new并自己删除(注意:你需要实现一些变体),并在应用程序的末尾记录所有未释放的内存(使用最后被破坏的全局变量可能有帮助)。