启动线程导致指针初始化时出现分段错误
Posted
技术标签:
【中文标题】启动线程导致指针初始化时出现分段错误【英文标题】:Launching threads cause segmentation fault on pointer initialization 【发布时间】:2019-07-19 13:34:59 【问题描述】:为什么只有在启动两个“空”线程时,这段代码才会导致*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;
【问题讨论】:
你没有初始化y
,所以你试图在一些随机内存中写入 20
线程(或缺少线程)与此无关。
请停止在您的标题中写标签。我们不断编辑它们是有原因的。
【参考方案1】:
取消对未初始化(或空)指针的引用是未定义的行为。 在这种情况下发生什么取决于编译器。
你可能打算这样做:
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;
在这种情况下,无论线程是否存在,它都会起作用。
【讨论】:
以上是关于启动线程导致指针初始化时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章