pthread_create传递结构指针时出现问题

pthread_create传递结构指针时出现问题,c,pthreads,C,Pthreads,在下面的代码中,当我在主功能中打印f->msg时,数据正确打印出来。但是,如果我在pthread\u create中传递mystruct*f并尝试打印msg值,则在receive\u data函数的第二行会出现分段错误 typedef struct _mystruct{ char *msg; } mystruct; void *receive_data(void* vptr){ mystruct *f = (mystruct*)vptr; printf("string

在下面的代码中,当我在主功能中打印
f->msg
时,数据正确打印出来。但是,如果我在
pthread\u create
中传递mystruct*f并尝试打印msg值,则在
receive\u data
函数的第二行会出现分段错误

typedef struct _mystruct{
    char *msg;
} mystruct;

void *receive_data(void* vptr){
    mystruct *f = (mystruct*)vptr;
    printf("string is %s\n",mystruct->msg);
    return NULL;
}

int main(){
    mystruct *f = malloc(sizeof(mystruct));
    f->msg = malloc(1000);
    f->msg[0] = '\0';
    strcpy(f->msg,"Hello World");
    pthread_t worker;
    printf("[%s]\n",f->msg);
    // attr initialization is not shown
    pthread_create(&worker,&attr,receive_data,&f);
}
未显示pthread的其他初始化代码


如何解决此问题?

您正在传递指向
mystruct
的指针。不要那样做

pthread_create(&worker, &attr, receive_data, f);

够了
f
已经是类型
mystruct*
&f
属于
mystruct**

f->msg[0]='\0'类型
在您的代码中是完全无用的。是的,我看到,在实际代码中,我使用strcat而不是strcpy,它需要定位'\0'。但是,在这种情况下,这是我的错误。OP的程序几乎肯定会在有机会打印任何内容之前终止,因为它运行在
main
的末尾。。。