使用捕获时boost :: regex段错误

时间:2009-05-31 23:49:33

标签: c++ boost-regex

我在下面的简单程序中遇到了一个seg错误。它似乎与析构函数match_results有关。

#include <iostream>
#include <vector>
#include <string>
#include <boost/regex.hpp>

using namespace std;

int main(int argc, char *argv)
{
    boost::regex re;
    boost::cmatch matches;

    boost::regex_match("abc", matches, re.assign("(a)bc"));

    return 0;
}

编辑:我正在使用boost 1.39

4 个答案:

答案 0 :(得分:4)

boost :: regex是boost中少数几个仅存在于头文件中的组件之一......有一个库模块。

您使用的库可能是使用与应用程序不同的设置构建的。

修改:找到一个包含this known boost bug的示例方案,其中必须使用与您的应用相同的-malign-double标记构建boost。

这是您的boost库与您的应用程序不具有二进制兼容性的几种可能情况之一。

答案 1 :(得分:0)

您使用的是哪个版本的提升?

我用boost 1.36编译了上面的例子,我没有得到任何seg错误。

如果您有多个boost库,请确保在运行时获取正确的版本。

Boost正则表达式需要针对库-lboost_regex-gcc_whatever-is-your- version

进行编译

就我而言:

g++ -c -Wall -I /include/boost-1_36_0 -o main.o main.cpp
g++ -Wall -I /include/boost-1_36_0 -L/lib/boost-1_36_0 -lboost_regex-gcc33-mt main.o -o x

执行:

LD_LIBRARY_PATH=/lib/boost-1_36_0 ./x

你会指向你的系统上的boost include / libs的位置,注意库名中的gcc和m(ulti)t(hreaded)的版本 - 这取决于你编译的内容,只需查看你的升级库目录并从那里选择一个版本的正则表达式库。

答案 2 :(得分:0)

您正在使用要从中获取匹配项的临时变量。我认为,你的问题将得到解决,如果改为“abc”,你将使用以下内容:

string a("abc);
regex_match(a, matches, re.assign("(a)bc"));

答案 3 :(得分:0)

我遇到了同样的问题。我尝试了Drew Dormann发布的解决方案,但它没有用。然后我发现我实际上是在连接1.40,但由于某种原因,标题是1.37。一旦我下载了正确的标题(1.40),它就停止了segfaulting。

当我使用调试符号-g进行编译并运行dbg backtrace时,我注意到了它。

希望有帮助...