我已经尝试了好几个小时,并用谷歌搜索了我想到的所有东西,但我快疯了。
我有一个结构:
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 都为空。如何在共享内存段内给他们正确的值?
我尝试删除 char* 指针,只是为了试一试,然后分段错误错误出现在连接到所述共享内存的另一个程序中,并且只是检查了矩阵内的值(检查 ->rows 和 ->columns 是成功)