Я изучаю потоки, и мой код выполняется до последнего оператора печати. Почему при печати возникает ошибка сегментации? Я думаю, что возможной причиной может быть несуществующий адрес, переданный в качестве аргумента для печати, но это не причина, я передаю действительный адрес.
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *thread (void *vargp) {
int arg = *((int*)vargp);
return &arg;
}
int main () {
pthread_t tid;
int thread_arg = 0x7ffdbc32fa34;
int *ret_value;
pthread_create(&tid, NULL, thread, &thread_arg);
pthread_join(tid, (void **)(&ret_value));
printf("hello\n");
printf("%X\n", *ret_value);
return 0;
}
Это дает следующий вывод:
hello
Segmentation fault (core dumped)
Это потому, что я возвращаю адрес локальной переменной, которая уничтожается при возврате потока? Я так не думаю, потому что переход на следующий код также вызывает ошибку сегментации!
void *thread (void *vargp) {
int * arg = malloc(sizeof(int));
*arg = *((int*)vargp);
return &arg;
}