gpt4 book ai didi

创建/初始化共享内存中的对象(由mmap()打开)

转载 作者:行者123 更新时间:2023-11-30 18:03:40 24 4
gpt4 key购买 nike

我创建了共享内存并使用以下代码映射了我的对象:

shmfd = shm_open(SHMOBJ_PATH, O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRWXG);
ftruncate(shmfd, shared_seg_size);
bbuffer = (boundedBuffer *)mmap(NULL, shared_seg_size, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);

现在我需要初始化并向 bbuffer 添加项目/从 bbuffer 中删除项目。当我尝试添加/删除时,出现“段错误:11”,这表明程序访问了未分配的内存位置。我该怎么做才能解决这个问题?

最佳答案

一个疯狂的猜测:

  • 也许您没有包含 mmap 的头文件
  • 并且您所在的架构具有 64 位 void* 和 32 位 int

可能发生的情况是,编译器默认将 mmap 返回 int,将其转换为指针,从而与高阶位发生冲突。

切勿对 mallocmmap 等函数的返回值进行强制转换,并始终认真对待编译器的警告。

关于创建/初始化共享内存中的对象(由mmap()打开),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113639/

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