在Visual Studio中,是否有可能隐藏安全的内存泄漏以避免泄漏检测?

3

有没有办法在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中使用泄漏检测对我来说是一个巨大的帮助,如果每次运行程序都出现假阳性,那么检测真正的内存泄漏就会变得更加困难。我不想放弃这一点,但我也不想放弃Python。

有没有什么办法可以隐藏这些内存泄漏?是否可以将代码封装在静态库、DLL、分离的进程中或其他任何方式?!如果我听起来很绝望,那是因为我确实很绝望。 ;)


你想要隐藏特定代码片段中的内存泄漏,还是隐藏放置在另一个库中的一些第三方代码创建的泄漏? - Alex F
1个回答

4
_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 前面也应该有一个下划线'_'。这是一个非常明显的错误,但为了完整性,您可能应该修复它。 - Adelost
修复了,这是一个复制粘贴的错误。谢谢。 - Alex F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接