是否可以将2D阵列作为共享内存分配给IPC?

mig*_*rso 3 c ipc shared-memory

我想使用IPC将共享内存分配为2D阵列.我尝试了以下方法:

id_shmem = shmget(ipc_key, sizeof(int)*rows*columns, IPC_CREAT|0666);

matrix = (int **)shmat(id_shmem, 0, 0);
Run Code Online (Sandbox Code Playgroud)

问题是,每当我尝试在矩阵中写入内容时,我都会遇到段错误.

el.*_*ado 14

int**不是2D数组,而是指针数组.您不应将指针存储在共享内存中,因为共享内存段可能在不同进程中的不同地址分配.尝试使用简单,平坦的1D阵列,它将使用一些索引魔法"模拟"2D阵列,即.

x,y -> y*width+x
Run Code Online (Sandbox Code Playgroud)