首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ 11 regex堆栈溢出/ VS2012

C++ 11 regex堆栈溢出/ VS2012
EN

Stack Overflow用户
提问于 2013-03-29 02:27:38
回答 1查看 1.7K关注 0票数 10

我正在将一些旧的Boost正则表达式代码转换为C++11,我偶然发现了一个测试用例的问题。下面是一个使用std::regex导致堆栈溢出异常的场景,但是在boost::regex中工作得很好。我没有改变正则表达式模式,并且已经验证了这个模式是我想要的。这个特定的字符串输入片段似乎导致堆栈溢出。使用VS2012,x64调试构建:

代码语言:javascript
复制
std::regex regx( "(^|\\})(([^\\{:])+:)+([^\\{]*\\{)" );

    const std::string testinput = " COLOR: #000; BACKGROUND-COLOR: #FFF; FONT-FAMILY: VERDANA, ARIAL, HELVETICA, SANS-SERIF; BACKGROUND:URL(URL(___FOO___)); BACKGROUND-2:URL(URL(___FOO___)); BORDER: 0 0 0 0; BORDER-2: 0 0 0; BORDER-3: 0 0; BORDER-4: 0PX; BORDER-5: 0.6; FILTER:PROGID:DXIMAGETRANSFORM.MICROSOFT.ALPHA(OPACITY=100); } ";
    std::smatch what;
    // this next line causes a stack overflow
    std::regex_search( testinput.cbegin(), testinput.cend(), what, regx );  

查看异常后的调用堆栈,在regex实现中似乎存在某种类型的无限递归。我现在没有GCC来测试这个。我做错了什么?

更新:在下面的建议之后,我将这段代码粘贴到控制台应用程序中,VS 2012 x64调试,并得到堆栈溢出。如果我将其更改为x64版本,或者Win32调试或发布,则运行良好。嗯?我需要重新安装VS和/或platform SDK吗?我在Win7 x64上。

更新2:有些相关的帖子:iterator cause a stack overflow with this data?,我想如果我重写我的regex,它可能会有帮助。尽管如此,我还是不知道为什么痛苦很重要。以及为什么它对其他人有效,但对我在我的系统中不起作用。叹一口气。

EN

回答 1

Stack Overflow用户

发布于 2013-04-02 04:26:03

我在x64调试构建中复制了这个版本,我相信这是一个真正的堆栈溢出

当您将堆栈大小更改为10 it左右(链接器命令行选项/STACK:"10000000")时,它将正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15696435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档