Проблема с передачей указателя структуры pthread_create - PullRequest
2 голосов
/ 20 июня 2011

В приведенном ниже коде, когда я печатаю 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 не отображается.

Как решить эту проблему?

1 Ответ

7 голосов
/ 20 июня 2011

Вы передаете указатель на указатель на mystruct.Не делай этого.

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

достаточно.f уже имеет тип mystruct*.&f имеет тип mystruct**.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...