将 'void *(struct thread_args *)' 传递给类型 'void * _Nullable (* _Nonnull)(void * _Nullable)' 的参数的不兼容指针类型
Incompatible pointer types passing 'void *(struct thread_args *)' to parameter of type 'void * _Nullable (* _Nonnull)(void * _Nullable)'
struct thread_args
{
int a;
int b;
int c;
};
void* check_subgrid(struct thread_args *p)
{
int x = p->a;
int y = p->b;
int z = p->c;
for (int i = x; i < x + 3; i++) {
int check[9] = {};
for (int j = y; j < y + 3; j++) {
if ( check[ sudoku[i][j] - 1 ] == 0 ) {
check[ sudoku[i][j] - 1 ] = 1;
}
else {
valid[2][z] = -1;
break;
}
}
}
if( valid[2][z] == -1 ) valid[2][z] = 0;
else valid[2][z] = 1;
return 0;
}
void check_sudoku(void)
{
pthread_t p_thread[11];
int thr_id , result;
struct thread_args p[9];
p[0].a = 0;
p[0].b = 0;
p[0].c = 0;
thr_id = pthread_create(&p_thread[2], NULL, check_subgrid, (void*)&(p[0]));
if (thr_id < 0)
{
perror("thread create error : ");
exit(0);
}
}
当我使用 pthread_create() 函数并将 'Structures array p[]' 作为参数时,例如 thr_id = pthread_create(&p_thread[2], NULL, check_subgrid, (void*)&(p[0]));
出现错误消息:“将 'void *(struct thread_args )' 传递给 'void * _Nullable ( _Nonnull)(void * _Nullable)' 类型的参数的不兼容指针类型”
我该如何解决?
传递给 pthread_create
的线程函数需要接受一个 void *
参数。
如果您需要参数为另一种类型,则定义一个局部变量并在函数内部使用强制转换进行初始化:
void* check_subgrid(void *ap)
{
struct thread_args *p = (struct thread_args *) ap;
// ...
}
struct thread_args
{
int a;
int b;
int c;
};
void* check_subgrid(struct thread_args *p)
{
int x = p->a;
int y = p->b;
int z = p->c;
for (int i = x; i < x + 3; i++) {
int check[9] = {};
for (int j = y; j < y + 3; j++) {
if ( check[ sudoku[i][j] - 1 ] == 0 ) {
check[ sudoku[i][j] - 1 ] = 1;
}
else {
valid[2][z] = -1;
break;
}
}
}
if( valid[2][z] == -1 ) valid[2][z] = 0;
else valid[2][z] = 1;
return 0;
}
void check_sudoku(void)
{
pthread_t p_thread[11];
int thr_id , result;
struct thread_args p[9];
p[0].a = 0;
p[0].b = 0;
p[0].c = 0;
thr_id = pthread_create(&p_thread[2], NULL, check_subgrid, (void*)&(p[0]));
if (thr_id < 0)
{
perror("thread create error : ");
exit(0);
}
}
当我使用 pthread_create() 函数并将 'Structures array p[]' 作为参数时,例如 thr_id = pthread_create(&p_thread[2], NULL, check_subgrid, (void*)&(p[0]));
出现错误消息:“将 'void *(struct thread_args )' 传递给 'void * _Nullable ( _Nonnull)(void * _Nullable)' 类型的参数的不兼容指针类型”
我该如何解决?
传递给 pthread_create
的线程函数需要接受一个 void *
参数。
如果您需要参数为另一种类型,则定义一个局部变量并在函数内部使用强制转换进行初始化:
void* check_subgrid(void *ap)
{
struct thread_args *p = (struct thread_args *) ap;
// ...
}