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

C 在共享内存中创建/初始化对象(由mmap()打开),c,memory,gnu,shared,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); 现在我需要初始化并

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

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,这表示程序访问了一个未分配的内存位置。我能做些什么来解决这个问题?

猜测:

  • 可能您没有包含
    mmap
    的头文件
  • 您所处的体系结构是64位
    void*
    和32位
    int
在默认情况下,编译器将
mmap
视为返回
int
,将其转换为指针,从而与高阶位发生冲突


切勿从函数(如
malloc
mmap
)中强制转换返回值,并始终认真对待编译器的警告。

显示代码以及冲突发生的位置。无论出于何种原因,我尝试访问bbuffer时都会发生冲突。是否测试了bbufer不为NULL?而shm_open()返回值?bbuffer不为空。它的地址很好,包括我在内。我删除了cast,但没有从编译器得到任何警告。