Я ищу несколько IPC с разделяемыми сегментами памяти в C \ Linux.64-разрядный сегмент разделяемой памяти Проблемы с C linux
Я иду на создание его как нормальный:
typedef struct {
int a[2];
} shm_segment;
...
shm_segment *shm;
int shm_id;
int shm_flags = IPC_CREAT | 0666
int shm_size = sizeof(struct shm_segment)
key_t key = 88899;
shm_id = shmget(key, shm_size, shm_flags); // ies this is in an if for error cheking but for example sake i omitted it
shm = (shm_segment*)shmat(shm_id, (void*)0, 0);
Последняя строка, где она ломается, при компиляции он просто дает:
Warning cast to pointer from integer of a different size.
Из того, что я сделал до того, как этот код отлично работает на 32-битных машинах (без предупреждения) (не проверял тот же самый код, но то же), но на моем 64-битном это дает это предупреждение при компиляции.
И при запуске это segfaults. Из исследования, которое я сделал, я считаю, что кастинг из void * в мой указатель помещает указатель вверх, начиная с 64-битных причин.
Любые идеи, как я могу исправить этих ребят? Или что это вызывает?
Почему использование '(пустота *) 0 ', когда вы могли бы использовать' NULL'? – Artelius