我创建了我的共享内存并使用以下代码映射我的对象:
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,表示程序访问了未分配的内存位置。我该怎么做才能解决这个问题?
答案 0 :(得分:0)
疯狂猜测:
mmap
void*
和32位int
可能会发生的情况是,编译器默认情况下将mmap
作为返回int
,将其强制转换为指针,然后将更高阶位冲突。
永远不要从malloc
或mmap
等函数转换返回值,并且始终认真对待编译器的警告。