Создание / инициализация объектов в разделяемой памяти (открывается с помощью mmap ()) - PullRequest
0 голосов
/ 13 ноября 2011

Я создал свою общую память и сопоставил свой объект со следующим кодом:

shmfd = shm_open(SHMOBJ_PATH, O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRWXG);
ftruncate(shmfd, shared_seg_size);
bbuffer = (boundedBuffer *)mmap(NULL, shared_seg_size, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);

Теперь мне нужно инициализировать и добавлять / удалять элементы в / из bbuffer.Когда я пытаюсь добавить / удалить, я получаю Ошибка сегментации: 11, которая указывает, что программа получила доступ к той области памяти, которая не была назначена.Что я могу сделать, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 13 ноября 2011

Дикая догадка:

  • возможно, у вас нет заголовочного файла для mmap в комплекте
  • и вы используете архитектуру с 64бит void* и 32 бит int

Может случиться так, что компилятор принимает mmap как возвращающий int по умолчанию, преобразует это в указатель и тем самым сталкиваетбиты порядка.

Никогда не приводите возвращаемые значения из таких функций, как malloc или mmap, и всегда серьезно относитесь к предупреждениям вашего компилятора.

...