可以隐藏Visual Studio中泄漏检测的安全内存泄漏吗?

时间:2014-05-22 02:21:52

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

有没有办法在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 个答案:

答案 0 :(得分:3)

_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