//TeamSize is an integer
int Seg_id = shmget(SHM_KEY,sizeof(Word)*TeamSize,IPC_CREAT);
void* Seg_ptr = shmat(Seg_id,0,0);
new(Seg_ptr) Word[TeamSize];
我遇到了这段代码的问题。 Word类是我用8字节char数组和一些解析函数定义的类。我想我正在使用shmget和shmat,就像其他人使用它们一样。但我不断遇到段故障。当我打印出Seg_id时,看起来正常只是一些数字。但Seg_ptr指向0xffffffffffffffff。然后下一行代码显然给了我seg错误。我想知道为什么Seg_ptr指向内存空间的末尾。提前谢谢!
答案 0 :(得分:3)
经过测试,似乎非root用户无法使用shmat,否则将返回Permission Denied。
延迟更新: 设置权限有帮助,例如shmget(SHM_KEY,sizeof(...),(IPC_CREAT | 0666))。但是我一直得到无效的参数;事实证明共享内存段已经存在相同的密钥。然后我可以使用ipcs来检查我是否已经拥有相同密钥的共享内存段并使用ipcrm来释放它。