I'm learning threading in C in OS. I don't know why following code is giving me segmentation fault. Can anyone help me here? I am also confused a bit about how pthread_join
uses its argument void ** retval
. What is its function?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *thread (void *vargp) {
int* arg = *((int*)vargp);
return (void*)arg;
}
int main () {
pthread_t tid;
int thread_arg = 0xDEADBEEF;
int *ret_value;
pthread_create(&tid, NULL, thread, &thread_arg);
pthread_join(tid, (void **)(&ret_value));
printf("%X\n", *ret_value);
return 0;
}
This is not correct:
int* arg = *((int*)vargp);
(int*)vargp
cast your void*
to int*
. But by writing int* arg = *((int*)vargp);
you assing to the arg
pointer the VALUE (0xDEADBEEF) of the argument vargp
. This value (0xDEADBEEF) is not a valid adress.
what is the version of your compiler? because he must alert you :
invalid conversion from int
to int*
You should write:
int* arg = (int*) vargp;
User contributions licensed under CC BY-SA 3.0