C++ 使用Boost::Regex时出现问题(控制台刚刚冻结)
出于某种原因,boost::regex重载了我的应用程序,它冻结了,没有出现错误,但编译很好。例如,此代码完全失败。我做错了什么?我更新到Boost1.47以查看它是否是DLL错误,但它仍然不起作用。我可以得到一个示例程序来测试boost::regex吗C++ 使用Boost::Regex时出现问题(控制台刚刚冻结),c++,boost,boost-regex,C++,Boost,Boost Regex,出于某种原因,boost::regex重载了我的应用程序,它冻结了,没有出现错误,但编译很好。例如,此代码完全失败。我做错了什么?我更新到Boost1.47以查看它是否是DLL错误,但它仍然不起作用。我可以得到一个示例程序来测试boost::regex吗 static const boost::regex expression("^[0-9]+"); std::string str = "123a1"; std::cout << boost::regex_search(str.c_s
static const boost::regex expression("^[0-9]+");
std::string str = "123a1";
std::cout << boost::regex_search(str.c_str(), expression);
首先要做的是查看您的Boost版本是否支持 穿线。编译和运行类似以下内容应该 告诉你:
#include <iostream>
#include <boost/regex.hpp>
int
main()
{
#ifdef BOOST_HAS_THREADS
std::cout << "Boost has threads" << std::endl;
#else
std::cout << "Boost doesn't support threads" << std::endl;
#endif
return 0;
}
第二件事是验证是否满足所有要求。
您只是发布了实际的行,而不是它们所在的上下文
执行。如果第一行在名称空间范围内,则应该可以
除非您已经开始在构造函数中线程化静态对象,
进入主管道前:不要这样做。如果第一行有阻塞
范围,即在函数中,则只有在第一次调用
此函数发生在线程开始之前。据我了解,,
使用g++,即使第一行有块作用域,也应该可以,但是
我不确定。在做了一些工作之后,我从BoostPro中删除了boost安装,自己编译了boost,现在它可以工作了。问题是BoostPro没有安装所有的DLL,当它要求我提供一个缺少的DLL时,我想BoostPro给它们的名字是错误的boost_regex-vc100-mt-1_47.DLL,而不是boost_regex-vc100-mt-gd-1_47.DLL。获得正确的DLL后,一切正常。感谢您帮助解决此问题 这段代码与线程有什么关系?你在使用线程吗?是的,我在使用线程,但整个线程函数太大,无法发布。出于某种原因,即使我注释掉main中的所有内容,只执行boost::regex示例,程序也会崩溃。。。这种促进会包括彼此之间的冲突吗?我已经包括了boost::regex、boost::algorithm::string、boost::algorithm::string::regex、boost::thread、boost::mutex。我把代码放在一个空的main中,它工作得很好。我在Boost中使用静态链接,因此可能是DLL问题。Boost支持线程,我在应用程序中使用两个线程,代码太大,无法发布。正则表达式在线程函数中执行,以检查某些字符串是否与正则表达式匹配。我添加了一个程序方案。因此正则表达式本身具有块作用域。把它移出函数,看看这是否改变了什么。通常,局部静态变量在多线程环境中不起作用。至少在大多数编译器中,我把它移到了main,脱离了任何线程,它仍然会破坏程序。我不知道如何让它在一个函数之外执行。由于某种原因,即使我尝试在一个只包含boost::regex的新项目中使用它,上面的regex代码也会中断。我的语法不正确吗?