Boost Regular Expression Error

I am trying to use code that I wrote on another computer that breaks a string into tokens. This code compiles fine. The code also works as intended on some other computers. I managed to reduce the code 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;
}

This compiles without errors or warnings, using: g++ -Wall test.cpp -lboost_regex but when used at run time that provides input test 100, the program fails.

action: test 100

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 โ†’]: the statement `px! = 0 'failed.

Interrupted

, . ? !

+5
4

shared_ptr , , . , , , , Boost.Regex.

, boost?

, std::cout << *iter++ << std::endl;. โ†’ std::cout << *iter << std::endl; ++iter;.

, , , , .

-1

. boost.

, - ( , ).

, -l -I, :

   g++ -W -Wall main.cpp $(LDFLAGS) -lboost_regex -I/data1/PROJECT_SEARCH/libsrc/boost_1_46_1
+8

, boost boost. , boost โ€‹โ€‹ .

+4

gdb - , , , .

The error you get looks like an invalid pointer, it is passed to the boost library somewhere.

0
source

All Articles