2012年3月5日

C++下类似Perl正则表达式的支持库deelx.h存在严重的内存泄漏,用boost::regex取代deelx.h

经历一番折腾,我用deelx.h支持的正则表达式完成了我需要的全部功能,但测试程序的内存开销时,吓了一大跳。deelx.h存在严重的内存泄漏。经过内存泄漏工具的检测,原来是realloc函数的使用出现了问题。我花了一个小时也没能搞定deelx.h中的这个bug。万般无奈,换到了boost:regex库。结果经过简单的程序片段转换,我完成的新版程序功能和原先的完全一样,而且完全没有内存泄漏。

原先我还有一个Perl程序实现了同样的功能。对比Boost::regex的实现以及Perl的实现,Boost内存开销小一些,但Perl速度快很多,二者都没有内存泄漏。网上对deelx.h的好评很多,猜想他们都是在用match功能,一旦用上replace功能,deelx.h就会吃光内存了。其实deelx.h在CodeProject上也获得了很多好评,但同时也被人发现了内存泄漏问题,很奇怪的是这个问题09年10月就被人发现了,作者也知道这事儿,为什么就还没有被修正呢?有机会时我再试试。

4 条评论:

史寿伟 说...

你好,我是 deelx 作者。我想跟您确认是内存泄露问题,还是使用说明不够清晰的问题。请与我联系。sswater@gmail.com。

Bill Lang 说...

朋友你好!感谢你的回复和对此事的关注。我当时试用deelx的replace功能,出现了内存泄漏,你可以自己再写一个很简单的程序测试一下。CodeProject上也有人回复过你的帖子提到此事。请仔细查看。

xuqinjie 说...

你replace之后, 是不是没有删除它?

peach5460 说...

事实证明
使用完毕需使用ReleaseString进行释放
然后是木有泄漏的