Почему я получаю дамп ядра, когда пытаюсь поймать исключение из boost::regex_match(text, e)?

Следующий пример взят из учебника. Когда я запускаю его, он выдает исключение, а затем coredump. Я пытаюсь использовать catch() для перехвата исключения, чтобы избежать дампа ядра, как показано ниже:

Но это не работает. какие-либо предложения?

Спасибо

-Тодд

---- сообщение coredump НАЧАЛО ---

прекратить вызов после выбрасывания экземпляра

'увеличение::exception_detail::clone_impl >'

what(): оператор повтора "" не может начинать регулярное выражение. Произошла ошибка при разборе регулярного выражения: '>>>HERE>>>'.

Прервать (сброс ядра)

---- КОНЕЦ---

--- программа НАЧАЛО ----

#include <boost/regex.hpp>
#include <iostream>
    void print_captures(const std::string& regx, const std::string& text)

    {

    boost::regex e(regx);

   boost::smatch what;

   std::cout << "Expression:  \"" << regx << "\"\n";

   std::cout << "Text:        \"" << text << "\"\n";

   try {

     //     boost::regex_match(text, what, e, boost::match_extra);

     boost::regex_match(text, e);

   }

   **catch(boost::regex_error& e) {

std::cout <<"!!!!\n"; 

   } 

   catch (...) {

     std::cout << "###\n"; 

   }** 



}


int main(int , char* [])

{
  print_captures("*", "AAA");

 } 

---- КОНЕЦ --


person user1273456    schedule 16.03.2012    source источник


Ответы (1)


Это конструктор boost::regex() вызывает исключение:

boost::regex e(regx);

Поместите его внутрь блока try, и он будет перехвачен обработчиком исключений boost::regex_error&.

person hmjd    schedule 16.03.2012