1
我有以下代碼用於測試如何使用pthread_exit()
和pthread_join()
「實現返回值」。段引用由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
聲明。段錯誤發生在線retVal = *retValPtr
。使用gdb,我可以看到retValPtr
指針不再是NULL
,但是當我嘗試print *retValPtr
gdb說:「無法訪問地址0x ...處的內存」。任何建議,我哪裏出錯了?
感謝您的解釋。應該更仔細地看一下'pthread_exit'手冊頁。 – simon 2012-03-13 13:48:12