C - 无效的类型参数"->"(具有"结构 coada")



我正在尝试创建一个线程列表,这些线程将被锁定并按列表的顺序执行。这是代码(这是一个繁忙的等待模拟,我有一个课程)

# include <stdio.h>
# include<pthread.h>
# include<stdlib.h>
# define NKIDS  10
pthread_mutex_t mutx;
struct kidrec {
    int data;
    pthread_t id;
};
struct coada {
    struct kidrec th;
    struct coada *next;
};
void *copilfunc(void*p)
{
    int *ip=(int*)p;
    int tmp;
    int v;
    pthread_mutex_lock(&mutx);
    tmp=v; v=*ip;
    printf(" We are at thread %d n",v);
    pthread_mutex_unlock(&mutx);
}
int main(){
    struct kidrec kids[NKIDS];
    struct coada c[NKIDS];
    int m;
    for(m=0;m<NKIDS;m++){
        kids[m].data=m;
        pthread_create(&kids[m].id,NULL,copilfunc,&kids[m].data);
        c[m].th=kids[m];
        if(m>0) c[m-1]->next=c[m];
        if(m==NKIDS) c[NKIDS]->next=c[0];
    }
    for(m=0;m<NKIDS;m++)
        pthread_join(c[m].th.id,NULL);
}

您正试图使用->访问结构数组上的属性,->是一个用于指针(非数组)的访问运算符。。。尝试使用

c[i].next = &c[j]

而不是

c[i]->next = c[j]

;)

变量c[]struct coada的数组,而不是struct coada *

因此表达式c[m-1]是一个struct coada,您可以使用.访问它的字段。

因此,它应该是:

c[m - 1].next = &c[m];

next是指针并不重要,句点用于访问其左侧的struct类型的值。还需要注意的是,您需要获取数组元素的地址,即右侧的&

相关内容

  • 没有找到相关文章

最新更新