读取时传递到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;