【发布时间】:2013-12-06 16:33:29
【问题描述】:
我对 Boost 库并不感兴趣。我需要它来匹配在 VS 2008 中编译的遗留 C++/MFC 项目中的正则表达式。
这是一个短代码sn-p:
//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。
【问题讨论】:
-
把上面的代码放在一个循环中,迭代 10 次(比如说),现在你的内存泄漏报告中有 10 个块吗?如果不是,那么我认为这不是内存泄漏。一些库会一次性分配他们永远不会释放的内存。
-
@john,那是什么?
-
正如我所说,它可能是一次性的内存分配,永远不会被释放。这并不是真正的内存泄漏,因为内存总是会在程序退出时恢复。只是一个理论,像我说的那样检查一下。
-
@john:这是一种非常糟糕的内存管理方法。
-
@john:所以你的意思是我上面给出的代码在语义上是正确的,并且 boost 库本身中有一些东西可以筛选内存,对吗?
标签: c++ windows boost memory-leaks mfc