提振.线程访问冲突的一个简单例子



我只是想运行一个非常简单的例子,使用线程与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配置。我错在哪里?

显然存在未定义的行为,因为代码没有任何错误。

那么错在哪里呢?

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

专:

  • 你可能会使用编译器版本/标志来构建你的项目,使其与所使用的库不兼容。
  • 你可能会链接到一个build/版本的boost的导入库,并在运行时找到一个不同的版本

这两个条件都引入了未定义行为。一切皆有可能

最新更新