Дано
struct dat_struct *data
Этот код
pthread_create(&thread_ids[i], NULL, thread_handler, (void*)&data);
передает struct dat_struct **
в поток как void *
. Обратите внимание на двойное значение **
.
Таким образом, это неправильно:
void *thread_handler(void *dat) {
struct dat_struct *data = (struct dat*)dat;
Этот код обрабатывает dat
как struct dat_struct *
- но вы передали struct dat_struct **
. (Я предполагаю, что (struct dat*)
является опечаткой).
Вы должны создать тему с
pthread_create(&thread_ids[i], NULL, thread_handler, data);
и
void *thread_handler(void *dat) {
struct dat_struct *data = dat;
Обратите внимание, что естьнет необходимости приводить к / от void *
в C.