我需要将一些数据传递给共享内存,这只会接受指针。所以我需要信号量在这个结构中,但是如果它是我不能为它添加值。我该怎么解决? 所以,这是结构:
typedef struct querem_usar {
int conta_homem;
int conta_mulher;
int conta_crianca;
struct sembuf lock[4];
struct sembuf unlock[4];
} queremUsar;
这就是我必须声明它的方式:
queremUsar *banheiro;
但是如果我尝试设置一个值来锁定或解锁,就像这样:
banheiro->lock[0].sem_num = 0;
banheiro->lock[0].sem_op = -1;
banheiro->lock[0].sem_flg = 0;
banheiro->unlock[0].sem_num = 0;
banheiro->unlock[0].sem_op = 1;
banheiro->unlock[0].sem_flg = 0;
我得到分段错误。我已经尝试过使用malloc,如下所示:
banheiro->lock = (struct sembuf*)malloc(sizeof(struct sembuf));
banheiro->unlock = (struct sembuf*)malloc(sizeof(struct sembuf));
但它给了我错误:
error: incompatible types when assigning to type ‘struct sembuf[4]’ from type
‘struct sembuf *’
请帮我解决一下吗?整个代码在这里:https://gist.github.com/4553796 第71行不应该被注释,我这样做是为了测试代码。继续尝试吧,这是大学所以它根本不复杂,应该是使用共享内存(shm,我不能使用线程)和semop()作为信号量的男女皆宜的浴室问题。
答案 0 :(得分:0)
使用此结构定义这将起作用
答案 1 :(得分:0)
您需要先为您的banheiro分配内存。
在第25行中,您声明指针“queremUsar * banheiro;”。这指向内存中的随机区域。因此,如果您幸运的话,在分配必要的内存之前进行的任何访问都将导致SEGFAULT。
你不需要为banheiro-> lock和banheiro->解锁分配内存,因为你将它定义为'struct sembuf'的数组,而不是指向它的指针。