C 如何将值附加到转换为指针的结构中的结构sembuf?

C 如何将值附加到转换为指针的结构中的结构sembuf?,c,pointers,struct,semaphore,C,Pointers,Struct,Semaphore,我需要将一些数据传递到共享内存,共享内存只接受指针。所以我需要这个信号量在这个结构中,但是如果它是,我就不能给它添加值。我怎样才能修好它? 这就是结构: typedef struct querem_usar { int conta_homem; int conta_mulher; int conta_crianca; struct sembuf lock[4]; struct sembuf unlock[4]; } queremUsar; 我必须这样声明: queremUsar

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

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;
banheiro->lock = (struct sembuf*)malloc(sizeof(struct sembuf));
banheiro->unlock = (struct sembuf*)malloc(sizeof(struct sembuf));
我犯了一个错误。我已经尝试过使用malloc,如下所示:

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;
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 *’
请帮我修一下好吗?整个代码如下所示:
第71行不应该被注释,我这样做是为了测试代码。去试试吧,这是大学用的,所以一点也不复杂,这应该是使用共享内存(shm,我不能使用线程)和semop()作为信号量的男女卫生间问题。

使用这种结构定义

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

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

 } queremUsar;

这将起作用

您需要首先为banheiro分配内存

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


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

不幸的是,它无法。。现在,它给了我一个错误:错误:在非结构或联合中请求成员'sem_num',以及许多类似这样的注释和警告:sem.h:59:note:应为'struct sembuf*',但参数的类型为'struct sembuf**'projeto.c:74:警告:从不兼容的指针传递'semop'的参数2键入OK。。你能给我malloc代码行吗?因为我尝试了所有可能的方法(据我所知),但没有成功…banheiro=malloc(sizeof(querymusar));除非你正在使用C++编译器,那么你需要明确地将Maloc返回到(QueMeSuar *),不幸的是我尝试过了,但这仍然不起作用,BANHEIO停止了指针。如果您喜欢,可以打开整个代码,并尝试让它工作,如果您喜欢挑战的话。链接位于问题的描述上。PS:banheiro作为指针的需要是第71行,它只接受指针。啊。。我没有先读完整的代码。。banheiro应该指向您请求的共享内存。那么你就不需要分配了。但是为什么你在做shmat之前要访问这个地区呢?。当你在做banheiro->lock[0]=…,banheiro是随机的。哦,上帝。。。我真不敢相信是这样。。哈哈哈,真是个愚蠢的错误。我真是太感谢你了,阿吉思!!我还是一个新手,我从来没有想到,现在我再也不会犯同样的错误了。非常感谢你!