当我尝试从boost :: regex_match(text,e)中捕获异常时,为什么会得到一个coredump?

时间:2012-03-16 08:02:20

标签: c++ boost boost-regex

以下示例来自教程。 当我运行它时,它抛出异常,然后coredump。 我尝试使用catch()来捕获异常,以避免像下面这样的coredump:

但它不起作用。有什么建议吗?

由于

-Todd

---- coredump消息BEGIN ---

在抛出

的实例后终止调用

'boost :: exception_detail :: clone_impl>'

what():重复运算符“”无法启动正则表达式。解析正则表达式时出错:'>>> HERE>>> '。

中止(核心倾销)

----结束---

---程序BEGIN ----

#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");

 } 

----结束 -

1 个答案:

答案 0 :(得分:1)

boost::regex()的构造函数抛出异常:

boost::regex e(regx);

将它放在try块中,它将被boost::regex_error&异常处理程序捕获。