LINUX SUSE SP4环境gcc编译报标题的警告,执行时报段错误
代码如下
void * xxx(int *xa)
{
...
}
int main(int argc, char* argv[])
{
...
int xxa;
pthread_create(&threadID, NULL, xxx, &xxa);
...
}
代码如下
void * xxx(int *xa)
{
...
}
int main(int argc, char* argv[])
{
...
int xxa;
pthread_create(&threadID, NULL, xxx, &xxa);
...
}
请问pthread_create的第3个参数要怎么改才能匹配上xxx函数?
正确的答案:
需要修改的不是pthread_create的第3个参数,而是第3个参数对应的线程函数的函数原型,线程函数的原型是这样的形式:
void *(*start_routine) (void *);
线程函数的参数和返回值都是一个void指针,而你写的线程函数的参数却是一个int指针,把线程函数的参数修改成void *类型就可以了。如果你需要int型,可以这样写(用强制类型转换,因为线程函数的参数是void *,所以这在线程函数内部经常这样用):
void * xxx(void *xa)
{
printf("Thread function argument was %d\n", *(int *)xa);
......
}