问题描述
struct func
{
int& i;
func(int& i_):i(i_){}
void operator()()
{
for (unsigned j = 0; j < 1000000; ++j)
{
++i;
}
}
};
int main()
{
int some_local_state = 0;
func my_func(some_local_state);
std::thread my_thread(my_func);
my_thread.detach();
return 0;
}
输出是
什么决定了退出代码? detach
ing 对于 Windows 进程意味着什么?
解决方法
在此示例中,错误代码 -1073741819 (0xc0020001) 不是由您的可执行文件产生的,而是由决定终止您的进程的操作系统产生的。
您还(在评论中)提出了有关分离线程的问题。
这意味着您不会在此线程上使用 join()
,因此您启动它,但您不想知道它何时完成工作。
编辑
在我的第一个答案中,我误读了示例,并认为突然终止是由于通过
未初始化的 i
引用。
这是错误的,因为 i
实际上是为了引用 some_local_state
而初始化的。
但是,当 main()
返回时,some_local_state
不再存在,但仍被线程引用。
没有说明在 main()
返回的确切时刻分离的线程会发生什么。
该线程是否在 main()
的局部变量消失之前立即终止?我真的很怀疑这个...
这大概解释了进程异常终止的原因。