我只是想运行一个非常简单的示例,该示例使用带 boost
的线程。这是代码:
#include <iostream>
#include <boost/thread.hpp>
void workerFunc()
{
std::cout << "hi" << std::endl;
}
int main(int argc, char* argv[])
{
boost::thread workerThread(workerFunc);
workerThread.join();
return 0;
}
但我得到一个异常(exception):
(boost_thread-vc140-mt-1_59.dll) in test.exe: 0xC0000005: Access violation reading location 0x0000000000000019.
尽管有异常,程序仍然运行,我可以在控制台中看到 hi
。我使用 VS2015,x64 配置。我的错误在哪里?
最佳答案
显然存在未定义的行为,因为代码没有任何问题。
那么,什么错了?
构建配置、部署(运行时环境)中可能存在错误,或者两者之间不匹配。
具体来说:
- 您可能会使用编译器版本/标志构建您的项目,使其与所使用的库二进制不兼容。
- 您可能会链接到 1 个构建/版本的 boost 的导入库,并在运行时找到不同的版本
两个条件介绍Undefined Behaviour .任何事情都有可能发生。
关于c++ - boost.thread - 一个简单示例中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33035250/