在下面的代码中,当我在main函数中打印f->msg
时,数据打印正确。但是,如果我在pthread_create
中传递mystruct * f并尝试打印出msg值,我会在receive_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的其他初始化代码。
如何解决此问题?
答案 0 :(得分:7)
你正在向指针传递指针mystruct
。不要那样做。
pthread_create(&worker, &attr, receive_data, f);
就够了。 f
已经是mystruct*
类型。 &f
的类型为mystruct**
。