鱼C论坛

 找回密码
 立即注册
查看: 2186|回复: 1

段错误,核心已转储

[复制链接]
发表于 2021-11-16 20:42:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编程在主进程中创建两个子进程,在子进程 shmw()中创建一个系统 V 共享内存区,并在其中写入格式化数据;在子进程 shmr()中访问同一个系统 V 共享内存区,读出其中的格式化数据。
运行结果是自己想要的,但是会显示段错误,核心已转储。想求助一下怎么解决,是什么原因

  1. #include <sys/types.h>
  2. #include <sys/shm.h>
  3. #include <sys/ipc.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>

  6. #define SHMKEY 75

  7. int shmid,i;
  8. int *addr;

  9. void shmw()
  10. {
  11.    int i;
  12.    shmid = shmget(SHMKEY,1024,0777);
  13.    addr = shmat(shmid,0,0);
  14.    for(i=9;i >=0;i--)
  15.    {
  16.       while(*addr !=-1);
  17.       printf("sent\n");
  18.       *addr = i;
  19.       
  20.    }
  21.    exit(0);
  22. }

  23. void shmr()
  24. {
  25.    shmid = shmget(SHMKEY,1024,0777|IPC_CREAT);
  26.    addr = shmat(shmid,0,0);
  27.    do
  28.    {
  29.       *addr = -1;
  30.       while(*addr == -1);
  31.       printf("received\n");
  32.    }while(*addr);
  33.    shmctl(shmid,IPC_RMID,0);
  34.    exit(0);
  35. }


  36. main()
  37. {
  38.    int pid1,pid2;
  39.    while((pid1 = fork()) == -1);
  40.    if(pid1 == 0)
  41.    {
  42.       shmr();
  43.       wait(0);
  44.    }
  45.    else
  46.    {
  47.       while((pid2 == fork()) ==-1);
  48.       if(pid2 == 0)
  49.       {
  50.          shmw();
  51.          wait(0);
  52.       }
  53.    }
  54. }
复制代码


QQ截图20211116204102.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-5 06:43:21 | 显示全部楼层
会不会是因为第53行的pid2 == fork(),把赋值写成了等于
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 12:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表