0

我需要将一些数据传递给共享内存,它只接受指针。所以我需要信号量在这个结构中,但如果是,我不能给它添加值。我该如何解决?所以,这是结构:

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() 作为信号量的男女皆宜的浴室问题。

4

2 回答 2

0

您需要首先为您的 banheiro 分配内存。

在第 25 行,您声明了指针“queremUsar *banheiro;”。这指向内存中的一个随机区域。因此,如果幸运的话,您在分配必要的内存之前所做的任何访问都会导致 SEGFAULT。

而且您不需要为 banheiro->lock 和 banheiro->unlock 分配内存,因为您将其定义为“struct sembuf”数组,而不是指向它的指针。

于 2013-01-17T05:22:49.237 回答
0

使用这个结构定义

typedef struct querem_usar {
 int conta_homem;
 int conta_mulher;
 int conta_crianca;

 struct sembuf *lock[4];
 struct sembuf *unlock[4];

 } queremUsar;

这将起作用

于 2013-01-17T05:12:40.943 回答