调用pthread_join()后的分段错误

前端之家收集整理的这篇文章主要介绍了调用pthread_join()后的分段错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用POSIX pthread库编写了以下代码
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>

pthread_t pid1,pid2;

void *test(void *arg)
{
void **end;
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
pthread_join(pid1,end);
printf("\nNew Thread going to go off\n");
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
return ((void *)NULL);
}    

int main()
{
pid1 = pthread_self();
pthread_create(&pid2,NULL,test,NULL);
printf("\nMain Thread ID: 0x%x\n",(unsigned int)pid1);
sleep(2);
printf("\nI am going off\n");
pthread_exit(0);
}

在执行代码时,我得到以下输出

Main Thread ID: 0xb7880b30
New Thread ID: 0xb787eb70
I am going off
Segmentation fault

在我研究的时候,调用pthread_join的线程(pid2)将阻塞,直到在参数(pid1)中传递的线程调用pthread_exit().并且pthread_exit()用于停止执行特定线程,让所有其他线程继续执行.

我想知道为什么我最后会遇到Segmentation Fault.

请妥善解释一下.

解决方法

您正在使用未初始化的变量void ** end;,这会导致未定义的行为:
pthread_join(pid1,end);

你应该做的是:

void *end;
pthread_join(pid1,&end);

即将有意义的指针传递给您想要结果的变量,而不是未初始化的指针.

猜你在找的MsSQL相关文章