1
 //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 字节字符数组和一些解析函数定义的类。我想我使用 shmget 和 shmat 就像其他人使用它们一样。但我不断收到段错误。当我打印出 Seg_id 时,它看起来很正常,只是一些数字。但是 Seg_ptr 指向 0xffffffffffffffff。然后下一行代码显然给了我段错误。我想知道为什么 Seg_ptr 指向内存空间的末尾。提前致谢!

4

1 回答 1

3

经测试,非root用户似乎无法使用shmat,否则会返回Permission Denied。

后期更新:设置权限有帮助,例如 shmget(SHM_KEY, sizeof(...),(IPC_CREAT | 0666))。但我一直收到无效的参数;事实证明,具有相同密钥的共享内存段已经存在。然后我可以使用 ipcs 检查我是否已经拥有具有相同密钥的共享内存段并使用 ipcrm 来释放它。

于 2013-09-30T04:24:45.737 回答