I have written the following code using the POSIX pthread library: 

```
#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);
}

```

On executing the code I got the following output:

```

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

```

As I studied, the thread(pid2) calling the pthread\_join will block until the thread passed in argument(pid1) calls pthread\_exit(). And pthread\_exit() is used to stop the execution of a particular thread letting all others to keep on executing. 

I want to know why I got Segmentation Fault at last. 

Please explain me properly.