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位
和32位void*
int
mmap
视为返回int
,将其转换为指针,从而与高阶位发生冲突
切勿从函数(如
malloc
或mmap
)中强制转换返回值,并始终认真对待编译器的警告。显示代码以及冲突发生的位置。无论出于何种原因,我尝试访问bbuffer时都会发生冲突。是否测试了bbufer不为NULL?而shm_open()返回值?bbuffer不为空。它的地址很好,包括我在内。我删除了cast,但没有从编译器得到任何警告。