我正在编写一个函数来创建线程和一个等待的函数。但我得到了一些错误,如
main.c:: warning: assignment makes pointer from integer without a cast
和
function.c: In function ‘create_thread’:
function.c:: warning: function returns address of local variable
function.c: In function ‘wait_thread’:
function.c:: warning: passing argument 1 of ‘pthread_join’ makes integer from pointer without a cast
我的代码在这里:
主要功能:
------------some declartions------
pthread_t **thid =NULL;
thid = create_thread(argv,count);
wait_thread(thid,count);
----------some code-----------------
在我的函数文件中:
pthread_t * create_thread(char *argv[],
int count)
{
pthread_t thid[count];
-------some codes-------------
status = pthread_create(&thid[index],NULL,file_op,(void*)mystruct);
--------------------------
return thid;
}
void wait_thread(pthread_t **thid,int count)
{
------some codes-----------
ret = pthread_join(thid[index],&retval);
}
指针的声明是否正确?为什么我不能从线程函数返回值?我的代码中有任何问题吗?
答案 0 :(得分:0)
让我们逐一查看警告:
main.c :: warning:赋值来自整数而没有强制转换的指针
您最有可能在此处收到此错误:
thid = create_thread(argv,count);
原因是create_thread
返回类型为pthread_t*
的参数,而thid
的类型为pthread_t**
。
function.c:在函数'create_thread'中:
function.c :: warning:function返回局部变量的地址
警告说明了一切。 pthread_t thid[count];
是一个局部变量。因此,return thid;
返回此数组的第一个元素的地址,一旦函数create_thread
退出,该地址将无效。
function.c:在函数'wait_thread'中:
function.c :: warning:传递'pthread_join'的参数1使得没有强制转换的指针产生整数
函数pthread_join
期望它的第一个类型为pthread_t
。您提供类型为thid[index]
的参数pthread_t*
。这是编译器警告的内容。