Visual studio 我可以从堆快照中确定内存泄漏的原因吗?

Visual studio 我可以从堆快照中确定内存泄漏的原因吗?,visual-studio,visual-c++,memory-leaks,Visual Studio,Visual C++,Memory Leaks,关闭时检测到内存泄漏,我想解决它。我已经用智能指针取代了我唯一使用的new,但是我使用了相当多的裸char[],我实在没有时间检查我在项目中使用的每个指针 我可以从这个堆快照中找出内存泄漏的原因吗 有没有办法下载此文件并在其中搜索特定的内存位置 我是不是浪费时间来诊断这个问题,因为Windows无论如何都会清理内存 我可以从这个堆快照中找出内存泄漏的原因吗 通常不会。您将需要至少2个快照,并对它们进行比较以找出差异。然后,您将浏览在这两个快照之间运行的代码,并查看差异的来源 这需要大量的训

关闭时检测到内存泄漏,我想解决它。我已经用智能指针取代了我唯一使用的
new
,但是我使用了相当多的裸
char[]
,我实在没有时间检查我在项目中使用的每个指针

  • 我可以从这个堆快照中找出内存泄漏的原因吗
  • 有没有办法下载此文件并在其中搜索特定的内存位置
  • 我是不是浪费时间来诊断这个问题,因为Windows无论如何都会清理内存
我可以从这个堆快照中找出内存泄漏的原因吗

通常不会。您将需要至少2个快照,并对它们进行比较以找出差异。然后,您将浏览在这两个快照之间运行的代码,并查看差异的来源

这需要大量的训练,并严格遵循记忆分析的步骤:

  • 执行有问题的步骤一次。这将确保完成任何延迟初始化
  • 拍快照
  • 再次执行相关步骤。确保返回到与之前相同的点
  • 拍快照
  • 比较快照
  • 结果可能仍然包括误报,例如日志窗口中的输出(前20行,后40行)

    有没有办法下载此文件并在其中搜索特定的内存位置

    我不知道它是否内置在VisualStudio中。但是您当然可以创建一个内存已满的崩溃转储文件,然后在那里查找它

    我是不是浪费时间来诊断这个问题,因为Windows无论如何都会清理内存

    我知道你不是在浪费时间。如果应用程序内存泄漏并耗尽地址空间,则应用程序可能会崩溃并导致用户数据丢失。你会发现问题并成为一名更好的程序员。您将学到一些对其他编程语言也有帮助的东西


    但除此之外,你是对的:当进程终止时,Windows将释放内存。因此,重新启动该计划可能会有所帮助,这可能会在几个月内为客户提供解决方案。

    感谢您的快速回复。从您的回答来看,您似乎认为我正在发生内存泄漏,但据我所知,只有在关闭应用程序时才会发生内存泄漏。我现在给德莱克一个机会,我想我会看看情况如何。@Skewjo:对不起,我不知道应用程序将从原来的问题中终止。这些都是假阳性的可能性更高。也许你想试试,而不是介绍一个新的工具。谢谢你链接到另一个问题。我最终安装了这个新工具,它运行得非常好,这有助于我理解为什么堆快照无法识别泄漏。它在关闭程序后导致了惊人的内存泄漏,但[一致认为(至少关于第一次泄漏)可以安全地忽略外部库中的静态执行。]()