当我在c写一个学校项目时,我在使用共享内存方面遇到了麻烦。出于某种原因,我的解决方案只运行了一次,现在它没有(非常不科学,我知道)。
我创建了一个共享变量:
int *sharedVar = mmap(NULL, sizeof(int)*7, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
当我尝试使用它时:
sharedVar[0]=1;
或者这个:
sharedVar[4]=0;
我收到分段违规(SIGSEGV)错误消息。 我很高兴你的任何建议。
编辑:strerror说:Bad file descriptor
这是什么意思?
解决方案:我没有清理过我的记忆。我觉得很蠢。
答案 0 :(得分:-1)
如果我不得不猜测,我说你没有清理共享内存。这是一个unix系统吗?使用ipcs命令显示所有共享内存。如果您设置shm一次,然后不要清理它,第二次它可能会失败,具体取决于您尝试访问它的方式。
要找出错误消息的含义,首先确定哪个系统调用返回了错误。然后,阅读ERRORS下的手册页以查看导致该错误设置的条件。