Ant*_*oro -4 c++ multithreading pointers segmentation-fault
为什么*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;
}
Run Code Online (Sandbox Code Playgroud)
取消引用未初始化(或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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,无论线程是否存在,它都将起作用。
归档时间: |
|
查看次数: |
85 次 |
最近记录: |