【发布时间】:2019-02-27 03:01:37
【问题描述】:
我正在尝试在进程之间使用共享内存。我只是一步一步地实现这些功能。当我尝试向其中写入内容时,我不断收到分段错误(核心转储)。
int* ms; // Pointer for milliseconds
int* ns; // Pointer for nanoseconds
void checkArgs(int argc, char* argv[]);
void createSharedMem();
void createSharedMem()
{
int shmid = shmget(KEY, sizeof(int)*128, IPC_CREAT |0666 );
if(shmid < 0)
printf("\n Error creating shared memory");
ms = shmat(shmid, NULL,0);
ns = shmat(shmid,NULL,0);
*ms = 0;
*ns = 0;
}
int main(int argc, char* argv[])
{
checkArgs(argc,argv);
createSharedMem();
*ms = 1;
*ns = 1;
printf("ms : %d ns : %d", *ms,*ns);
}
【问题讨论】:
-
是的,我以为按继续后它会询问代码,但它直接发布了问题。无论如何,现在添加。 ;)
-
根据共享内存操作,这似乎很好。并尝试执行此操作,它可以正常获取共享内存并且打印正常。 shmget() 是否成功?分段错误是否在 checkArgs() 中?放更多 printf 来检查崩溃的位置。
-
不,发生错误,因为我添加了变量来测试数据是否正在写入共享内存。在我添加 ms 和 ns 之前,一切都很好。
-
我刚刚发现没有创建共享内存。删除所有 ms 和 ns 分配后,我从检查中得到“创建共享内存时出错”。
标签: c linux operating-system shared-memory systems-programming