繁体   English   中英

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

[英]Create/initialize objects in shared memory (opened by mmap())

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

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中的项目。 当我尝试添加/删除时,出现分段错误:11,表明程序访问了未分配的内存位置。 我该怎么做才能解决这个问题?

一个疯狂的猜测:

  • 也许您没有包含mmap的头文件
  • 并且您使用的是64位void*和32位int的体系结构

可能发生的情况是,默认情况下,编译器将mmap用作返回int的类型,并将其强制转换为指针,从而使高阶位发生冲突。

切勿mallocmmap函数的返回值,并始终认真对待编译器的警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM