gpt4 book ai didi

c++ - shmat 返回的指针指向地址空间的末尾,这会导致段错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:57 27 4
gpt4 key购买 nike

 //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_ptr 指向内存空间的末尾。提前致谢!

最佳答案

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

晚更新: 设置权限有帮助,例如 shmget(SHM_KEY, sizeof(...),(IPC_CREAT | 0666))。原来具有相同键的共享内存段已经存在。然后我可以使用 ipcs 检查我是否已经拥有具有相同 key 的共享内存段并使用 ipcrm 来释放它。

关于c++ - shmat 返回的指针指向地址空间的末尾,这会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com