Я ищу несколько IPC с сегментами разделяемой памяти в 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-битным причинам.
Любая идея, как я могу это исправить, ребята? Или чем это вызвано?