当前位置: 主页 > 日志 > C/C++ >

pcre匹配长字符串导致stack overflow问题的解决



今天遇到了这个问题(如题),网上查了一下,基本没有找到什么解决方法。最后在王俊的Blog

(http://blog.vckbase.com/wangjun/archive/2009/10/28/39611.html)里看到一句话“默认PCRE是以递归方式调用match, 当需要处理的字

符串比较大时,堆栈就会溢出(stack overflow)。”,并且他给出了修改“pcre的内存分配开关,自己手动编译”的方法,我试了一下,问题

果然解决了,总结如下:

解决方法:不要使用网上提供的已编译好的pcre库(lib和dll),自己下载pcre源文件,修改,编译。


(1)让pcre默认编译为在堆中分配内存:

打开pcre源文件目录,在config.h里,加入如下宏定义:

#define NO_RECURSE

附:pcre源文件的下载地址

http://www.psyon.org/projects/pcre-win32/index.php


(2)如何使用vc编译pcre?

 我下载的是pcre7.9的源代码。

 建立一个VC的DLL工程,去掉原有的包含文件,将PCRE的所有pcre_*.c都加进去, pcre后面没有_的不要加, 后缀名是.cc的不要加。

 增加工程预编译宏 HAVE_CONFIG_H,不使用预编译头 Not Using Precompiled Headers。

 这样就可以在 VC 上编译通过了,我在vc9(vs2008)上编译通过,记着要用release版的。

[日志信息]

该日志于 2010-04-13 23:02 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “pcre匹配长字符串导致stack overflow问题的解决” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部