4

下面的简单程序出现段错误。它似乎与析构函数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

4 回答 4

4

boost::regex 是 boost 中少数不只存在于头文件中的组件之一……有一个库模块。

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

编辑:找到一个带有这个已知 boost bug的示例场景,其中 boost 必须使用与-malign-double您的应用程序相同的标志构建。

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

于 2009-05-31T23:55:46.617 回答
0

你用的是哪个版本的boost?

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

如果您有多个 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) 的版本 - 这取决于您编译的内容,只需查看您的 boost lib 目录并选择一个版本的正则表达式库。

于 2009-06-01T00:05:17.033 回答
0

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

string a("abc);
regex_match(a, matches, re.assign("(a)bc"));
于 2009-06-01T08:17:21.393 回答
0

I was having the same problem. I tried the solution posted by Drew Dormann, but it didn't work. Then I discovered that I was actually linking against 1.40, but for some reason the headers were for 1.37. Once I downloaded the correct headers (1.40), it stopped segfaulting.

I noticed it when I had compiled with the debugging symbols -g and run a dbg backtrace..

Hope that helps...

于 2011-11-01T16:09:32.160 回答