将 '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;

    // ...
}