升压正则表达式运行时错误 [英] Boost regex runtime error
问题描述
我试图用一些code,我一个分割字符串成令牌另一台计算机上写道。这code编译罚款。在code也如预期运作上的一些其他计算机。我已经成功地降低了code到以下内容:
I'm trying to use some code that I wrote on another computer that splits a string into tokens. This code compiles fine. The code also works as intended on some other computers. I've managed to reduce the code down to the following:
#include <string>
#include <boost/regex.hpp>
typedef std::vector<std::string> token_t ;
token_t generate_tokens(std::string raw_input){
//this function breaks a input string into tokens. So test 100 goes to 2 tokens "test" and "100".
boost::regex re_splitter("\\s+"); //this uses the regex \s+ to find whitespace. The + finds one or more whitespace characters.
boost::sregex_token_iterator iter(raw_input.begin(), raw_input.end(), re_splitter, -1);
//this breaks the string using the regex re_splitter to split into tokens when that is found.
boost::sregex_token_iterator j; //This is actually in the Boost examples, j is the equivalent of end. Yes this did also seem weird to me at first...
token_t token_vector;
unsigned int count = 0;
while(iter != j)
{
token_vector.push_back(*iter);
std::cout << *iter++ << std::endl;
++count;
}
return token_vector;
}
int main(){
std::string in;
int amount = -1;
std::cout << "action: ";
std::getline(std::cin, in);
boost::regex EXPR("^test \\d*(\\.\\d{1,2})?$");
bool format_matches = boost::regex_match(in, EXPR);
token_t tokens = generate_tokens(in);
if(format_matches){
amount = atoi(tokens.at(1).c_str());
}
std::cout << "amount: " << amount << "\n";
return 0;
}
这编译没有错误或警告使用: G ++ -Wall TEST.CPP -lboost_regex
但是,当在运行时使用提供输入测试100
程序失败。
This compiles without errors or warnings using: g++ -Wall test.cpp -lboost_regex
but when used at runtime providing the input test 100
the program fails.
动作:测试100
的a.out:/usr/local/include/boost/smart_ptr/shared_ptr.hpp:412:类型名称的boost ::详细:: shared_ptr_traits ::参考的boost :: shared_ptr的::运算*()const的[与T =提高:: regex_traits_wrapper>>]:!`断言PX = 0'失败
a.out: /usr/local/include/boost/smart_ptr/shared_ptr.hpp:412: typename boost::detail::shared_ptr_traits::reference boost::shared_ptr::operator*() const [with T = boost::regex_traits_wrapper > >]: Assertion `px != 0' failed.
中止
我完全失去了对于什么是怎么回事。这是一个错误,在我的code,或在图书馆?在调试这个任何意见大大AP preciated!
I'm completely lost as to what is going on here. Is this a bug in in my code or in the library? Any advice for debugging this is greatly appreciated!
推荐答案
既然你不使用的shared_ptr
在code,我可以看到没有其他东西看起来错误的,它可以在其它机器上,我会说这可能是在Boost.Regex的错误。
Since you're not using shared_ptr
in your code, and I can see no other stuff that looks wrong AND it works on other machines, I'd say it's probably a bug in Boost.Regex.
我敢打赌,其他机器已经提振其他版本的安装?
I bet the other machines have other versions of boost installed?
如果我猜我会尝试改变的std ::法院LT&;&LT; * ITER ++&LT;&LT;的std :: ENDL;
行头。 - > 的std ::法院LT&;&LT; * ITER&LT;&LT;的std :: ENDL; ITER ++;
If I had to guess I'd try changing the std::cout << *iter++ << std::endl;
line first. -> std::cout << *iter << std::endl; ++iter;
.
和是的,在一个调试器中运行它像瑞士的建议,并看到那里的断言被触发。
And yeah, run it in a debugger like Swiss suggested, and see where the assertion is triggered.
这篇关于升压正则表达式运行时错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!