我只是想运行一个非常简单的例子,使用线程与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的导入库,并在运行时找到一个不同的版本
这两个条件都引入了未定义行为。一切皆有可能