Все работало нормально с моим проектом при использовании Boost 1.58 и GCC4.9, после решения обновить его до Boost 1.72 и GCC9 у меня появилась эта проблема.
Я искал это для Некоторое время и сначала я думал, что это проблема с кодом моего проекта, но я проверил его снаружи на следующем примере, и это все еще происходит.
По сути, у меня есть этот код в основном:
std::string s = "45.125º";
const char* pattern =
"^\\s*(\\+|\\-)?\\s*"
"(?:(?:\\s*((?:[0-9]|\\.)+)(?:º|d|\\s+)))?"
"(?:(?:\\s*((?:[0-9]|\\.)+)(?:'|m|\\s+)))?"
"(?:(?:\\s*((?:[0-9]|\\.)+)(?:\"|s|\\s+)))?"
"\\s*$";
const boost::regex pieces_regex(pattern);
boost::cmatch pieces_match;
if(boost::regex_match(s.c_str(), pieces_match, pieces_regex, boost::match_default)) {
std::cout << "Match" << std::endl;
for (auto piece : pieces_match) {
std::cout << "Piece: " << piece.str() << std::endl;
}
}
else std::cout << "NOPE" << std::endl;
std::cout << "DONE" << std::endl;
Если я включу boost / regex.hpp и скомпилирую его с помощью:
c++ regexTest.cpp -I $BOOST_ROOT/include/ $BOOST_ROOT/lib/libboost_regex-x64.so
Все работает нормально, если я использую строку, которая соответствует ей, и если нет, то нет 't, хорошо.
Это результат выполнения:
Match
Piece: 45.125º
Piece:
Piece: 45.125
Piece:
Piece:
DONE
Однако, если я помещу это в тест Boost:
BOOST_AUTO_TEST_SUITE (test_reg)
BOOST_AUTO_TEST_CASE (test_example)
{
exactly the same code as before
}
BOOST_AUTO_TEST_SUITE_END ()
А теперь включите boost / test / includes / unit_test.hpp и скомпилируйте его с помощью:
c++ regexTest.cpp -I $BOOST_ROOT/include/ $BOOST_ROOT/lib/libboost_regex-x64.so $BOOST_ROOT/lib/libboost_unit_test_framework-x64.so
Он все еще работает и тест запускается, но это происходит:
Running 1 test case...
Match
Piece: 45.125º
Piece:
Piece: 45.125
Piece:
Piece:
DONE
*** No errors detected
corrupted size vs. prev_size in fastbins
Aborted (core dumped)
Если я использую более простое выражение reg, например:
const boost::regex pieces_regex("^[0-9]+$");
, например, ничего не падает, несмотря на находясь внутри теста.
Сначала я подумал, что это проблема с моим регулярным выражением, но он, кажется, работает нормально (вне теста), а также протестировал его на https://regex101.com/.
Честно говоря, я понятия не имею, что еще можно попробовать, я начинал думать, что, возможно, произошла какая-то ошибка связи, потому что я указал что-то неправильно для CMake, но ошибка все еще происходит в этом изолированном примере. Любая идея о том, что может происходить здесь?
Примечание: ошибка происходит точно так же внутри моего проекта (он работает нормально и после сообщения «нет ошибок» он вылетает), но появляется сообщение:
malloc_consolidate(): invalid chunk size
Aborted (core dumped)