У меня есть следующий код для проверки того, как «реализовать возвращаемые значения», используя pthread_exit()
и pthread_join()
.
#include <stdio.h>
#include <pthread.h>
void* busy() {
int returnValue = 2;
pthread_exit((void*)&returnValue);
}
int main() {
void* retVoidPtr = NULL;
int* retValPtr = NULL;
int retVal;
pthread_t busyThread;
pthread_create(&busyThread, NULL, busy, NULL);
pthread_join(busyThread, &retVoidPtr);
retValPtr = (int*) retVoidPtr;
retVal = *retValPtr;
printf("Busy thread returned %d\n", retVal);
return 0;
}
Программа компилируется нормально, но никогда не попадает в оператор printf
. Segfault происходит на линии retVal = *retValPtr
. Используя gdb, я вижу, что указатель retValPtr
больше не NULL
, но когда я пытаюсь print *retValPtr
, gdb говорит: «Не удается получить доступ к памяти по адресу 0x ...». Любые предложения, где я иду не так?