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

时间:2011-11-13 18:20:53

标签: c memory gnu shared

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

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

1 个答案:

答案 0 :(得分:0)

疯狂猜测:

  • 也许您没有包含mmap
  • 的标头文件
  • 您使用的是64位void*和32位int
  • 的架构

可能会发生的情况是,编译器默认情况下将mmap作为返回int,将其强制转换为指针,然后将更高阶位冲突。

永远不要从mallocmmap等函数转换返回值,并且始终认真对待编译器的警告。