通过pthread_create传递struct指针的问题

时间:2011-06-19 20:42:47

标签: c pthreads

在下面的代码中,当我在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的其他初始化代码。

如何解决此问题?

1 个答案:

答案 0 :(得分:7)

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

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

就够了。 f已经是mystruct*类型。 &f的类型为mystruct**