C \ Linuxで共有メモリセグメントを使用してIPCを実行しようとしています。
私は通常のようにそれを作成し続けます:
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ビットではコンパイル時にこの警告が表示されます。
そして、実行時にセグメンテーション違反を起こします。私が行った調査から、void* からポインターへのキャストは、64 ビットの原因から、ポインターを混乱させると考えています。
どうすればこの人を修正できますか?または何が原因ですか?