c语言 - 如何在 Linux 中使用共享内存时修复"Segmentation fault (core dumped)"



我在 Linux 中使用共享内存(没有多个进程(编写了一个简单的 c 程序,因为我在完整程序中遇到了"分段错误"。

我仍然收到同样的错误。我做错了什么?

谢谢!

#include<stdio.h>
#include<stdlib.h>
#include<sys/shm.h>
#include<sys/ipc.h>
#include<sys/types.h>
void sys_err(char s[])
{
    perror(s);
    exit(1);
}
int main(int argc, char *argv[])
{
    int shmid, *shmptr, *ptr;
    if(shmid = shmget(IPC_PRIVATE, (10)*sizeof(int), 0666|IPC_CREAT)<0)
        sys_err("Cannot shmget");
    if((shmptr=(int*)shmat(shmid,0,0))<(int*)0)
        sys_err("Cannot shmat");
    shmptr[0]=1;    // <----- error: "Segmentation fault (core dumped)"
    //OR
    *shmptr=1;  // <----- error: "Segmentation fault (core dumped)"
    //OR
    ptr=shmptr; // <----- error: "Segmentation fault (core dumped)"
    *ptr=1;
    if(shmdt(shmptr)<0)
        sys_err("Cannot shmdt");
    shmctl(shmid,IPC_RMID,0);
    return 0;
}

我最终发现了问题。其实很小。

在这一部分中:

if(shmid = shmget(IPC_PRIVATE, (10)*sizeof(int), 0666|IPC_CREAT)<0)
    sys_err("Cannot shmget");

缺少"(("来包围孔表达式,如下所示:

if((shmid = shmget(IPC_PRIVATE, (10)*sizeof(int), 0666|IPC_CREAT))<0)
    sys_err("Cannot shmget");

现在它运行了。谢谢!

相关内容

  • 没有找到相关文章

最新更新