通过pthread_create传递结构体指针的问题

3
在下面的代码中,当我在主函数中打印f->msg时,数据能够正确打印。然而,如果我将mystruct *f传递给pthread_create并尝试打印出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的初始化代码未显示。

我该如何解决这个问题?


你的代码中 f->msg[0] = '\0'; 是完全没有用的。 - Vinicius Kamakura
是的,我看到了,在实际代码中,我使用了strcat而不是需要定位'\0'的strcpy。但是,在这种情况下,这是我的错误。 - user482594
1个回答

9
您正在传递一个指向指针的mystruct。请不要这样做。
pthread_create(&worker, &attr, receive_data, f);

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


2
也就是说,OP的程序几乎肯定会在打印任何内容之前终止,因为它会越过main的结尾... - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接