//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指向0xffffffffffffffffff。然后,下一行代码显然给了我段错误。我想知道为什么Seg_ptr指向内存空间的末尾。提前致谢!
最佳答案
经过测试,似乎非root用户不能使用shmat,否则它将返回Permission Denied。
最新更新:
设置权限会有所帮助,例如shmget(SHM_KEY,sizeof(...),(IPC_CREAT | 0666))。原来具有相同密钥的共享内存段已经存在。然后,我可以使用ipcs来检查共享内存段是否具有相同的密钥,并使用ipcrm释放它。
关于c++ - 由shmat返回的指针指向地址空间的末尾,这会导致seg错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19075589/