boost.thread - 一个简单示例中的访问冲突

时间:2015-10-09 09:56:39

标签: c++ multithreading boost visual-studio-2015 boost-thread

我只是想运行一个使用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;
}

但我得到一个例外:

(boost_thread-vc140-mt-1_59.dll) in test.exe: 0xC0000005: Access violation reading location 0x0000000000000019.

尽管有例外,该程序仍然有效,我可以在控制台中看到hi。我使用VS2015,x64配置。我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

有明显未定义的行为,因为代码没有任何问题。

那么, 错误了什么?

构建配置,部署(运行时环境)或这两者之间可能存在错误。

具体做法是:

  • 您可能使用编译器版本/标志构建项目,使其二进制文件与使用的库不兼容。
  • 您可以链接到1 build / version boost的导入库,并在运行时找到不同的版本

这两个条件都引入了Undefined Behaviour。任何事情都可能发生。