Глубокое копирование структур в общую память POSIX - PullRequest
1 голос
/ 10 ноября 2011

У меня есть две структуры:

struct bets{
   int bets[36];
   int last_bet;
}bets
struct board{
   int type;
   bets *bet;
 }board

Я создал кусок памяти шейдов sizeof(board).Итак, я получил указатель на плату в разделяемой памяти (чтобы не называть это ptr).Я создал новую структуру board и bets, 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)).

Все еще получаю ошибку ошибки сегментации.

Как я могу скопировать обе структуры одна внутри другой и при этом иметь доступ к вложенной?

1 Ответ

8 голосов
/ 10 ноября 2011

Стандартное «глубокое копирование» в разделяемую память бесполезно, поскольку указатели, даже если они указывают на сегмент совместно используемой памяти, являются локальными для виртуального адресного пространства вашего процесса и не будут такими же, когда другой процесс отображает разделяемую память,Вместо указателей вам нужно хранить смещения от начала сегмента разделяемой памяти.size_t будет подходящим типом.

...