【问题标题】:Memory leak only in Release mode仅在 Release 模式下内存泄漏
【发布时间】:2013-08-14 14:40:23
【问题描述】:

我正在 VS2010 中开发一个带有 C# 前端的应用程序,该前端通过 C++/CLI 包装器使用本机 C++ DLL。我注意到仅在发布模式下发生的严重内存泄漏(或引用泄漏)。在 Debug 模式下,应用程序的内存占用是稳定的。

我已将问题的根源缩小到视频播放循环,并且在某些时候我相当确信视频数据没有得到正确处理。但是,我想知道对于仅在发布模式下发生的泄漏,我应该特别注意什么。

对于它的价值,在有问题的 C++/CLI 类中,我正在实现 here 中提出的 dispose/finalize 模式。

【问题讨论】:

  • 哇,有人可以解释一下反对意见吗?!是不是因为我不共享代码。此视频播放循环涉及很多代码,位于所有三个层(C++、C++/CLI、C#)。我希望对 Release 和 Debug 模式之间的差异有深入了解的人可以加入。
  • @Kohanz:有时(通常)不清楚人们为什么投反对票。但是当我阅读 OP 时,我感觉您是在要求人们使用他们的心理调试技能来指出内存泄漏(但是您可以查看我的投票记录,并且可能推断出我没有投反对票)。最初陈述的问题基本上是(我认为)对一般调试技术的建议的请求 - 并且这种类型的东西可能可以用谷歌搜索。
  • 不鼓励讨论否决/赞成。但是,解释问题所在的评论总是一个好主意。
  • @MarkWilkins 请放心,我总是先用谷歌搜索解决我的问题。您可以从我的提问记录中推断,向 SO 发布问题通常是最后的手段。我看不出这个问题在范围/细节上与stackoverflow.com/questions/2158410/memory-leaks-in-debug-mode 有何不同

标签: c# c++ visual-studio-2010 memory-leaks c++-cli


【解决方案1】:

如果我是你,我会寻找对 assert#ifdef _DEBUG/#endif 类型构造中的释放函数的调用。

【讨论】:

  • 这是一个建设性的提示。谢谢,我一定会看看的。
【解决方案2】:

检查您的项目设置并检查所有运行时库。 有时问题实际上不是您要链接到的运行时库本身,而是您在项目中设置为忽略的运行时库。

根据microsoft 的这一页,您必须仔细注意要忽略哪个库,具体取决于您使用的是哪个库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多