使用mmap导致分段违规的共享变量(SIGSEGV)

时间:2014-05-04 17:16:20

标签: c posix shared-memory mmap sigsegv

当我在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

这是什么意思?

解决方案:我没有清理过我的记忆。我觉得很蠢。

1 个答案:

答案 0 :(得分:-1)

如果我不得不猜测,我说你没有清理共享内存。这是一个unix系统吗?使用ipcs命令显示所有共享内存。如果您设置shm一次,然后不要清理它,第二次它可能会失败,具体取决于您尝试访问它的方式。

要找出错误消息的含义,首先确定哪个系统调用返回了错误。然后,阅读ERRORS下的手册页以查看导致该错误设置的条件。