深层复制结构到POSIX共享内存

Oni*_*adu 1 c memory shared nested structure

我有两个结构:

struct bets{
   int bets[36];
   int last_bet;
}bets
struct board{
   int type;
   bets *bet;
 }board
Run Code Online (Sandbox Code Playgroud)

我创造了一大块鲥鱼记忆sizeof(board).所以,我在共享内存中得到了一个指向Board的指针(以免称之为ptr).我创建了一个新的boardbets结构 board *b,bets * bts....添加board->bet = bts.现在,我将"b"复制到了ptr memcpy(ptr, bts, sizeof(board)).我可以访问ptr->type.但是当我尝试访问时 ptr->bet->last_bet,我遇到了分段错误错误.

我也试过像这样复制:

board *b;
memcpy(ptr, b, sizeof(board));
bets *bts;
memcpy(ptr->bet, bts, sizeof(bets)).
Run Code Online (Sandbox Code Playgroud)

仍然得到分段错误错误.

如何将两个struct one复制到另一个内部并仍然可以访问嵌套的?

R..*_*R.. 8

标准的"深度复制"到共享内存中是没有用的,因为指针,即使它们指向共享内存段,也是进程的虚拟地址空间的本地,并且当另一个进程映射共享内存时不一样.您需要存储共享内存段开头的偏移量,而不是指针.size_t将是一个合适的类型.