我在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。
答案 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的简洁版本。)
如果有其他人找到摆脱此内存泄漏警告的方法,请在此处发布。直到,这是我的答案...