C++ 一个特定的Boost正则表达式工作正常,但是如果我在Boost单元测试中使用它,它就会崩溃
在使用Boost 1.58和GCC4.9时,我的项目一切正常,在决定将其升级到Boost 1.72和GCC9后,我开始遇到这个问题 我已经对此进行了一段时间的研究,起初我认为这是我的项目代码的一个问题,但我已经用下面的示例对它进行了外部测试,但它仍然存在 基本上,我有一个主要的代码:C++ 一个特定的Boost正则表达式工作正常,但是如果我在Boost单元测试中使用它,它就会崩溃,c++,regex,gcc,boost,boost-regex,C++,Regex,Gcc,Boost,Boost Regex,在使用Boost 1.58和GCC4.9时,我的项目一切正常,在决定将其升级到Boost 1.72和GCC9后,我开始遇到这个问题 我已经对此进行了一段时间的研究,起初我认为这是我的项目代码的一个问题,但我已经用下面的示例对它进行了外部测试,但它仍然存在 基本上,我有一个主要的代码: std::string s = "45.125º"; const char* pattern = "^\\s*(\\+|\\-)?\\s*" "(?:(?:\\s*((?:[0-9]|\\.)+
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;
一切都很好,如果我使用一个匹配的字符串,如果我不匹配,它就不匹配,好吧
这是执行的结果:
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/included/unit_test.hpp,并用以下代码编译:
c++ regexTest.cpp -I $BOOST_ROOT/include/ $BOOST_ROOT/lib/libboost_regex-x64.so
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]+$");
例如,即使在测试中,也不会发生崩溃
起初我认为这是我的正则表达式的一个问题,但它本身(在测试之外)似乎工作得很好,并且已经在上一次测试了它
老实说,我不知道还有什么可以尝试的,我开始认为可能存在某种链接错误,因为我为CMake指定了错误的内容,但是错误仍然发生在这个单独的示例中。你知道这里会发生什么吗
注意:错误在我的项目中以相同的方式发生(执行良好,在说“无错误”后崩溃),但消息如下:
malloc_consolidate(): invalid chunk size
Aborted (core dumped)
我在Boost 1.68中尝试过这个,我得到了相同的错误。Boost 1.58和GCC9中完全相同的代码工作得很好。您是否包括Boost.ipp文件?我也有同样的问题,因为我试图作弊,并在.ipp文件中使用一些私有实现的东西。当没有包含该文件时,问题就消失了。我在Boost 1.68中尝试过,我得到了相同的错误。Boost 1.58和GCC9中完全相同的代码工作得很好。您是否包含Boost.ipp文件?我也有同样的问题,因为我试图作弊,并在.ipp文件中使用一些私有实现的东西。当你不包括那个文件时,问题就消失了。