【问题标题】:boost.thread - access violation in a simple exampleboost.thread - 一个简单示例中的访问冲突
【发布时间】:2016-01-07 05:23:03
【问题描述】:

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

【问题讨论】:

  • 附带说明,为什么在 2015 年需要 boost::thread?
  • 我用它来创建跨平台代码。
  • 尝试在调试器中运行调试版本。
  • @SergeyA 也许他没有。这是一个奇怪的评论。

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


【解决方案1】:

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

那么, 出了什么问题?

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

具体来说:

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

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

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多