为什么这段代码只有在启动两个"空"线程时才会导致*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;
}
取消引用未初始化(或 null(指针是未定义的行为。在这种情况下发生什么都取决于编译器。
您可能打算执行以下操作:
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;
}
在这种情况下,无论线程是否存在,它都将工作。