调用pthread_join后的SegFault

时间:2015-04-26 13:21:38

标签: c

我是线程新手,使用pthread_join时遇到问题。

这是我的代码:

Ω(nlogn)

我的一个线程完成了他的工作,在第二个完成后,我有一个分段错误。 我的函数find_way_out返回pthread_exit((void *)j);或pthread_exit(0); 其中j是整数指针。 你知道它可以来自哪里吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是你应该将指向实际pthread_t变量的指针作为pthread_create的第一个参数传递,作为模拟按引用传递的方式,{{1然后将初始化对象。

由于您传递了未初始化的指针,因此当pthread_create取消引用指针时,您将undefined behavior。当您尝试取消引用pthread_create调用的指针时,也会拥有它。

更糟糕的是,因为你只为一个 pthread_join对象分配空间,所以你将超出“数组”的范围。

然后对于pthread_t循环,您将pthread_join为一个小的正数,而j是一个负数,这意味着您的循环将迭代很多< / em>因为它必须迭代直到i溢出并变为负数,然后继续循环直到j等于j

相反,我建议这些改变:

  • -1对象
  • 使用可变长度数组
  • 将数组的“大小”保存在您不更改的变量中
  • 最后,使用pthread_t循环

这样的东西
for