可以在 Visual Studio 的泄漏检测中隐藏安全的内存泄漏吗?
Posted
技术标签:
【中文标题】可以在 Visual Studio 的泄漏检测中隐藏安全的内存泄漏吗?【英文标题】:Possible to hide safe memory leak from leak detection in visual studio? 【发布时间】:2014-07-10 21:37:16 【问题描述】:有什么方法可以在 Visual Studio 的正常内存检测中隐藏安全的内存泄漏?
我正在使用此调试标志检测内存泄漏:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
我只是花了很多时间来了解如何在 C++ 项目中嵌入 Boost.Python。它工作得很好,我对我将拥有的灵活性印象深刻。所有的努力终于得到了回报。也就是说,直到我魂飞魄散地意识到,Python 集成存在内存泄漏。这似乎是一个已知问题,不会修复Does the Python 3 interpreter leak memory when embedded?。由于内存泄漏保持不变,他们说可以安全地忽略它。但是,在 Visual Studio 中使用泄漏检测对我来说是一个巨大的帮助,而且每次运行程序时都会出现误报,这将使检测真正的内存泄漏变得更加困难。我不想放弃,但我不想放弃蟒蛇。
有什么办法可以隐藏内存泄漏吗?将代码包装在静态库、DLL、单独的进程中,什么?!如果我听起来很绝望,那是因为那非常接近我的感受。 ;)
【问题讨论】:
您想隐藏特定代码片段的内存泄漏,还是由放置在另一个库中的某些第三方代码造成的泄漏? 【参考方案1】:_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) & ~_CRTDBG_ALLOC_MEM_DF);
// allocations here are ignored by memory leaks tracker
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF);
// memory leaks tracking continues
将内存泄漏跟踪恢复到其原始状态的通用版本:
int flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
_CrtSetDbgFlag(flags & ~_CRTDBG_ALLOC_MEM_DF);
// allocations here are ignored by memory leaks tracker
_CrtSetDbgFlag(flags);
// memory leaks tracking returns to its original state
【讨论】:
第二个_CRTDBG_ALLOC_MEM_DF
前面也应该是一个'_'。这是一个非常明显的错误,但也许您应该修复它以确保完整性。
已修复,是剪切粘贴错误。谢谢。以上是关于可以在 Visual Studio 的泄漏检测中隐藏安全的内存泄漏吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio 的 sonarlint 扩展检测新引入的代码气味/泄漏
在 Visual C++ (Windows) 中检测内存泄漏