共享内存段中的指针

努多

我已经尝试了好几个小时,并且用谷歌搜索了所有我想到的东西,但是我快要疯了。

我有一个结构:

typedef struct {
  int rows;
  int collumns;
  int* mat;
  char* IDs_row;
} mem;

直到以后,我才知道int *(矩阵)和char *的大小。

当我这样做时,我将创建共享内存,如下所示:

mem *ctrl;
int size = (2 + ((i-1)*num_cons))*sizeof(int) + i*26*sizeof(char); //I have the real size now
shmemid = shmget(KEY, size, IPC_CREAT | 0666);
if (shmemid < 0) {
    perror("Ha fallado la creacion de la memoria compartida.");
    exit(1);
}
ctrl = (mem *)shmat(shmemid, 0, 0);
if (ctrl <= (mem *)(0)) {
    perror("Ha fallado el acceso a memoria compartida");
    exit(2);
}

没问题 然后,给ctrl-> rows和collumns一个值,并为所有矩阵赋0。

但是之后,我在char *和bam中写了一些段错误。

调试程序时,我看到mat和IDs_row这两个指针都为null。如何在共享内存段内为它们提供正确的值?

我尝试删除char *指针,只是尝试一下,然后在连接到所述共享内存的另一个程序中出现了段错误错误,并且仅检查了矩阵内的值(检查->行和-> collumns是否为成功)

卢契安格里戈尔:
ctrl = (mem *)shmat(shmemid, 0, 0); 

这只会将有效内存分配给ctrl指针,而不分配ctrl->matctrl->IDs_row

您可能想要:

mem *ctrl;
shmemid = shmget(KEY, sizeof(ctrl), IPC_CREAT | 0666);
//allocate memory for the structure
ctrl = (mem *)shmat(shmemid, 0, 0);

//allocate memory for the int*
shmemid = shmget(KEY,((i-1)*num_cons))*sizeof(int), IPC_CREAT | 0666);
ctrl->mat = (int*)shmat(shmemid, 0, 0);

//allocate memory for the char*
shmemid = shmget(KEY,i*26*sizeof(char), IPC_CREAT | 0666);
ctrl->IDs_row = (char*)shmat(shmemid,0,0);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章