Вы, вероятно, создаете структуру в том же объеме, что и pthread_create. Эта структура больше не будет действительной после выхода из этой области.
Попробуйте создать указатель на структуру в куче и передать указатель на структуру вашему потоку. Не забудьте удалить эту память где-нибудь (в ветке, если вы никогда больше не будете ее использовать - или когда она вам больше не понадобится).
Кроме того, как упомянул cyberconte, если вы собираетесь получать доступ к этим данным из разных потоков, вам необходимо заблокировать доступ к ним с помощью мьютекса или критической секции.
Редактировать 14 мая 2009 @ 12:19 EST : Кроме того, как уже упоминали другие, вы должны привести свой параметр к правильному типу.
Если вы передаете переменную, которая является глобальной структурой (на которую вы, похоже, настаиваете), ваша функция потока должна будет привести к типу:
void my_thread_func(void* arg){
my_struct foo = *((my_struct*)(arg)); /* Cast the void* to our struct type */
/* Access foo.a, foo.b, foo.c, etc. here */
}
Или, если вы передаете указатель на вашу структуру:
void my_thread_func(void* arg){
my_struct* foo = (my_struct*)arg; /* Cast the void* to our struct type */
/* Access foo->a, foo->b, foo->c, etc. here */
}