[英]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
的头文件 void*
和32位int
的体系结构 可能发生的情况是,默认情况下,编译器将mmap
用作返回int
的类型,并将其强制转换为指针,从而使高阶位发生冲突。
切勿malloc
或mmap
函数的返回值,并始终认真对待编译器的警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.