我一直在尝试这个好几个小时,而谷歌所有的东西我都会想到,但我要疯了。共享内存段内的指针
我有一个结构:
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是succesfull)
谢谢!我从来没有想过为每个指针做shmget。 (我甚至不知道它是如何工作的,做同样的调用,但“铸造”它) 现在有一个结构中的第二个整数,“collumns”的问题。我在一个进程中放置了一个“1”,另一个进程将其读取为62045或类似的东西。我试着将sizeof(ctrl)更改为sizeof(men)和2 * sizeof(int)+ sizeof(int *)+ sizeof(char *),但没有运气。 – Knudow
对不起,我发送了消息,然后进行了编辑。你能帮我多一点吗?我现在有一个问题,结构中的第二个整数。 – Knudow
@ user1420534请发布有关这个新问题的新问题,他们似乎没有关系。 –