Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一个特定的Boost正则表达式工作正常,但是如果我在Boost单元测试中使用它,它就会崩溃_C++_Regex_Gcc_Boost_Boost Regex - Fatal编程技术网

C++ 一个特定的Boost正则表达式工作正常,但是如果我在Boost单元测试中使用它,它就会崩溃

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]|\\.)+

在使用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;
一切都很好,如果我使用一个匹配的字符串,如果我不匹配,它就不匹配,好吧

这是执行的结果:

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文件中使用一些私有实现的东西。当你不包括那个文件时,问题就消失了。