您的位置:首页 > 其它

线程传递结构体参数(Segmentation fault (core dumped))

2017-03-16 13:22 253 查看
1. 线程传递结构体参数,

1)把定义的结构体换成指针名字  -->typedef   typedef struct list{
regp reg_head;
car_iop car_io_head;
char number[4];

}*listp;


 2)用指针名字定义一个新的名字并申请内存-->  listp list = malloc(sizeof(list));  

3)在创建线程参数中把新名字强制转换成(void *)-->  pthread_create(&in, NULL, &car_in, (void *)list);

注意:线程传递 结构体 参数必须是指针型变量,然后再强制转换成(void *)型变量

用指针名字定义变量时, 必须申请一块与结构体大小相同的内存,不然编译可以通过,但是运行会有段错误(Segmentation fault (core dumped))

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <pthread.h>

typedef struct reg{ //注册用户结构体
char name[10];//用户名,默认guest(普通用户)
char id[9];//ISO14443A卡id号 "ffff ffff"
char type[8];//vip或average
char tell[12];

}reg_data;

typedef struct car_io{ //进出卡结构体
char name[10];
char id[9]; 
char time[9];
char mday[3];
char mon[4];
char wday[4];
char year[5];
char charge[7];
}car_io_data; 

/*链表节点结构体*/
typedef struct reg_node{ //注册用户链表节点结构体
reg_data data;
struct reg_node *prev, *next;

}regnode, *regp;

typedef struct car_io_node{ //进出卡链表节点结构体
car_io_data data;
struct car_io_node *prev, *next;

}car_ionode, *car_iop;

typedef struct list{
regp reg_head;
car_iop car_io_head;
char number[4];

}*listp;

void *car_in(void *arg)

{
printf("car_in\n");

listp test = (listp)arg;

printf("%s\n",test->number);

pthread_exit(NULL);

}

void *car_out(void *arg)

{
printf("car_out\n");

pthread_exit(NULL);

}

int main(void)

{

pthread_t in, out;

listp list = malloc(sizeof(list));

strcpy(list->number ,"999");

// regp reg_head = reg_init();
// car_iop car_io_head = car_io_init();

pthread_create(&in, NULL, &car_in, (void *)list);

pthread_create(&out, NULL, &car_out, NULL);

pthread_join(in, NULL);

pthread_join(out, NULL);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: