Я получаю «ошибку сегментации», когда я пытаюсь использовать некоторые регулярные выражения. В этом примере первое регулярное выражение работало нормально, но второй произвел ошибку сегментации:Ошибка сегментации C++ regex
#include <regex>
#include <iostream>
using namespace std;
void out(const string& s, const string& d,bool b) { cout << s << ", " << d << (b ? "=found" : "=not found") << endl; }
int
main()
{
const auto exp1 = string{"<.*>.*</.*>"};
const auto reg1 = regex{exp1};
const auto data1 = string{"<tag>value</tag>"};
const auto found1 = regex_match(data1, reg1);
out(exp1, data1, found1);
const auto exp2 = string{"<(.*)>.*</\\1>"};
cout << "About to create the regex!" << endl;
const auto reg2 = regex{exp2};
cout << "done." << endl;
const auto data2 = string{"<tag>value</tag>"};
const auto found2 = regex_match(data2, reg2);
out(exp2, data2, found2);
cout << "All done!" << endl;
}
Я компилировать его, как это:
g++ -O0 -g -Wall -Wpedantic -std=c++11 try3.cpp -o try3
И когда я запускаю его я получаю это:
$ ./try3
<.*>.*</.*>, <tag>value</tag>=found
About to create the regex!
Segmentation fault
Я бегу на CentOS релиз 5.11 с libstdC++ - 4.1.2-55.el5
То есть проблема с собранной регулярными выражениями библиотеки, а не сам регулярного выражения. Вы можете сказать, если это так, если вы ставите попытку/поймать эту линию, но ее никогда не поймают. – sln
@sln: true, я попробовал раньше с помощью инструкции try и ничего не поймал. У вас (или других) есть обход? –
Не уверен, но проблема Google - это, вероятно, либо версия lib, либо какие флаги были установлены при компиляции. Кто-то должен пройти мимо, это точно знает. – sln