为什么这段代码*y = 20
只有在启动两个“空”线程时才会导致分段错误?
int main(int argc, char **argv) {
int x = 10;
int *y;
*y = 20;
std::thread t1([]{});
std::thread t2([]{});
t1.join();
t2.join();
return 0;
}
取消引用未初始化(或空)的指针是未定义的行为。在这种情况下会发生什么取决于编译器。
您可能打算执行以下操作:
int main(int argc, char **argv) {
int x = 10;
int *y = &x;
*y = 20;
std::thread t1([]{});
std::thread t2([]{});
t1.join();
t2.join();
return 0;
}
在这种情况下,无论线程是否存在,它都会工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句