我正在寻找在 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 位。
有什么想法我可以解决这个问题吗?或者是什么原因造成的?