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

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;

}










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酣楼驻海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值