读取时传递到pthread_create的结构数据不正确

读取时传递到pthread_create的结构数据不正确,c,pthreads,C,Pthreads,在下面的代码中,我试图将结构传递到pthread\u create。结构是全局定义的。然后在调用pthread\u create之前对其进行初始化 // Global scope struct dat_struct { char *dat[SIZE]; int received[SIZE]; int numreceived; }; 在线程处理程序中,读取数据会给出不正确的结果。如果我使用gdb检查传递到pthread\u create的内容,它与另一端接收到的内容不同 我的代码中有

在下面的代码中,我试图将结构传递到
pthread\u create
。结构是全局定义的。然后在调用
pthread\u create
之前对其进行初始化

// Global scope
struct dat_struct {
  char *dat[SIZE];
  int received[SIZE];
  int numreceived;
};
线程处理程序中
,读取数据会给出不正确的结果。如果我使用gdb检查传递到
pthread\u create
的内容,它与另一端接收到的内容不同

我的代码中有一个基本问题吗?

struct dat_struct *data
此代码

pthread_create(&thread_ids[i], NULL, thread_handler, (void*)&data);
struct dat\u struct**
作为
void*
传递给线程。注意双
**

因此,这是错误的:

void *thread_handler(void *dat) {
  struct dat_struct *data = (struct dat*)dat;
该代码将
dat
视为
struct dat\u struct*
——但您传递了一个
struct dat\u struct**
。(我假设
(struct dat*)
是一个印刷错误)

您应该使用

pthread_create(&thread_ids[i], NULL, thread_handler, data);


请注意,在C中不需要转换到/从
void*

对不起,这只是键入问题时的一个错误。我现在已经添加了初始化。
void *thread_handler(void *dat) {
  struct dat_struct *data = (struct dat*)dat;
pthread_create(&thread_ids[i], NULL, thread_handler, data);
void *thread_handler(void *dat) {
  struct dat_struct *data = dat;