boost :: regex库中的内存泄漏

时间:2013-11-21 23:19:33

标签: c++ windows boost memory-leaks mfc

我在Boost库上并不大。我需要它在我在VS 2008中编译的遗留C ++ / MFC项目中进行正则表达式匹配。

这是一段简短的代码段:

//Need Unicode support
CString ss;
boost::tregex r(L"<(From )?([A-Za-z0-9_]+)>(.*?)");
boost::tmatch what;
CString chat_input(L"<Darker> Hello");
if(boost::regex_match(chat_input, what, r))     //Memory leak on this line
{
    // extract $1 as a CString:
    ss = L"Match";//CString(what[1].first, what.length(1));
}
else
{
    ss = L"No match";
}

当我在调试模式下运行它时,我在输出窗口中得到以下内容:

Detected memory leaks!
Dumping objects ->
{287} normal block at 0x00460068, 4096 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.

如果我注释掉boost::regex_match行,那么泄漏就会消失。

我在这里缺少什么?

PS。我链接的boost版本是1_55_0。

2 个答案:

答案 0 :(得分:0)

单元测试框架CppUnit,也抱怨boost::regex库中的“内存泄漏”。

我认为这是因为boost::regex实现使用静态成员变量,如“Meyers”单例,并且内存泄漏检测不喜欢它。升级库没有任何问题,它肯定泄漏内存!

在MSVC 2010之后,您可以使用std::regex代替,我可以向您保证不会报告任何泄漏。在MSVC 2008中,您应该可以使用std::tr1::regex,但我没有任何经验,我很抱歉。

答案 1 :(得分:0)

无法找到解决此问题的方法。仍然不能忽略它,因为在开发过程中忽略可能的其他内存泄漏太容易了。

对我有用的解决方案是创建一个独立的C / C ++ - 仅Dll项目并从中导出所有需要的Boost功能,然后可以将其作为共享库从MFC项目中使用。 (这使它成为Boost的简洁版本。)

如果有其他人找到摆脱此内存泄漏警告的方法,请在此处发布。直到,这是我的答案...