由 shmat 返回的指针位于地址空间的末尾,这给出了 SEG 错误
pointer returned by shmat points at the end of address space which gives seg fault
//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 错误。我想知道为什么Seg_ptr在内存空间的末尾指向。提前感谢!
测试后,似乎非 root 用户无法使用 shmat,否则它将返回权限被拒绝。
后期更新: 设置权限会有所帮助,例如 shmget(SHM_KEY, sizeof(...(,(IPC_CREAT | 0666((。但是我一直得到无效的论点;事实证明,具有相同密钥的共享内存段已经存在。然后,我可以使用 ipcs 检查我是否已经拥有具有相同密钥的共享内存段,并使用 ipcrm 释放它。
相关文章:
- C++ - 将元素按升序插入数组的 SEG 错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 字符串上的合并排序上的 Seg 错误
- 导致 Seg 错误的 SingleLinkedList 的析构函数
- g++ 9.2.1 (Linux) 会导致 seg 错误,但 Windows 上的代码块不会
- 函数抛出seg错误,我不知道为什么
- Microsoft Visual Studio 2019交叉编译CMake库 - 有效,但存在SEG错误
- 由于相同的文件名/类名存在于不同的SO中而导致的SEG错误
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- 垫子对象数组太大会导致 Seg 错误
- 为什么push_back成矢量<矢量<int>>导致 seg 错误?
- 在向量中存储字符串存在 SEG 错误
- 更改本地类名时出现 seg 错误
- 使用 ->GetString( " ") 时出现 Seg 错误,它位于单独的类中
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- 字符和 int 连接何时会导致 seg 错误?
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- .EOF 在读取文件时导致 Seg 错误:FIXXED
- 在 qt5 中使用 QSharedPointer 时出现 Seg 错误
- 在c++和Linux中查找总线错误/Seg故障的问题