我在下面的简单程序中遇到了一个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
答案 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时,我注意到了它。
希望有帮助...