pthread_join 함수를 사용하여 어제 문제가 발생했습니다. 오류가 발생했습니다. 인터넷에서 오랜 시간 동안 검색했지만 해결할 방법이 없습니다.왜 **를 사용하여 pthread_join의 반환 값을 얻을 수 없습니까
pthread_join.c
#include <stdio.h>
#include <pthread.h>
void* say_hello(void* args)
{
printf("hello from thread\n");
pthread_exit((void*)1);
}
int main()
{
pthread_t tid;
int iRet=pthread_create(&tid,NULL,say_hello,NULL);
if(iRet)
{
printf("pthread create error:iRet=%n\n",iRet);
return iRet;
}
void *retval;
iRet=pthread_join(tid,&retval);
if(iRet)
{
printf("pthread_join error:iRet=%d\n",iRet);
return iRet;
}
printf("retval=%ld\n",(long)**(&retval));
// printf("retval=%ld\n",(long)retval);
return 0;
}
$ error:invalid use of void expression
나는 pthread_join
의 반환 값을 얻기 위해 (&retval)
를 사용하려고합니다. 그 retval이 void **에 속한다는 느낌이 들지만 (retval) 값을 얻을 수는 있지만 실패합니다. ** 포인터의 값을 얻기 위해 void을 사용할 수 없습니다. retval은 pthread_join에 의한 값이지만 ** retval을 사용하면 성공할 수 없습니다. ,
$ error:invalid use of void expression
사용'의 printf ("RETVAL = %의 LD \ 없음"(길이) RETVAL))'또는'의 printf ("RETVAL = % D \ n ", (int) retval)); ' – alk