You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向pthread_create传递嵌套结构体报错:指针类型转换问题求解

解决pthread_create参数类型不匹配问题

我看了你的代码,编译器报的cannot convert to a pointer type错误原因很明确:pthread_create的第四个参数要求是void*类型,但你传的是Parameter[i]——这是一个struct param结构体变量,不是指针,类型自然不匹配。而且你的代码里还有个隐藏的内存分配错误,我一起给你修复,完全保持你原来的代码风格:

错误根源&修复步骤

  1. 内存分配错误:你给Parameter分配内存时用了sizeof(struct param*),这是分配了threads个指针的空间,但我们需要的是threads个完整的struct param结构体空间,所以要改成sizeof(struct param)。
  2. 参数传递错误:pthread_create需要传递参数的指针,所以要把Parameter[i]改成&Parameter[i],把每个结构体的地址传进去,这样就能转换成void*了。

修改后的完整代码

#include <pthread.h>
#include <stdlib.h>

struct data{ 
    double **A; 
    double **B; 
    double **C; 
}; 

struct param{ 
    struct data *v; // A,B,C
    int n, i; 
}; 

// 这里对齐你代码里的runner函数,原代码里的matrix_vector应该是笔误?
void* runner( void* param) {
    // 把void*转成struct param*来访问线程参数
    struct param *p = (struct param*)param;
    // 在这里实现你的矩阵运算逻辑,比如用p->v->A、p->i、p->n这些变量
    return NULL;
} 

int main(int argc, char **argv) { 
    int threads=10; 
    // 注意:这里的A/B/C需要后续初始化内存,否则会是野指针
    double **A,**B,**C; 
    struct data v; 
    v.A=A; 
    v.B=B; 
    v.C=C; 

    struct param *Parameter; 
    // 修正内存分配:分配threads个struct param结构体的空间
    Parameter=malloc(threads*sizeof(struct param)); 
    for(int i=0;i<threads;i++) { 
        Parameter[i].v=&v; 
        Parameter[i].i=i; // 这里改成循环变量i,不然所有线程的索引都是0,应该不是你的本意
        Parameter[i].n=threads; 
    } 

    pthread_t* threadNumber; 
    threadNumber = malloc(sizeof(pthread_t)*threads); 
    for (int i =0 ;i<threads;++i) {
        // 修正参数传递:传入结构体的地址
        pthread_create(&threadNumber[i],NULL,runner,(void*)&Parameter[i]); 
    }

    for(int i=0;i<threads;++i) {
        pthread_join(threadNumber[i],NULL); 
    }

    // 记得释放内存,避免泄漏
    free(Parameter);
    free(threadNumber);
    // 后续还要记得释放A/B/C的内存(如果之前分配了的话)

    return 0; 
}

额外提示

  • 我给线程函数加上了参数转换的代码,你需要在里面补充具体的矩阵运算逻辑。
  • 原来的代码里所有线程的i都赋值为0,这大概率不是你的需求,我改成了Parameter[i].i=i,让每个线程拿到自己的索引值。
  • 最后一定要记得释放分配的内存,避免内存泄漏问题。

内容的提问来源于stack exchange,提问作者liebe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:34:57