鱼C论坛

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

段错误,核心已转储

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

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

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

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

#define SHMKEY 75

int shmid,i;
int *addr;

void shmw()
{
   int i;
   shmid = shmget(SHMKEY,1024,0777);
   addr = shmat(shmid,0,0);
   for(i=9;i >=0;i--)
   {
      while(*addr !=-1);
      printf("sent\n");
      *addr = i;
      
   }
   exit(0);
}

void shmr()
{
   shmid = shmget(SHMKEY,1024,0777|IPC_CREAT);
   addr = shmat(shmid,0,0);
   do 
   {
      *addr = -1;
      while(*addr == -1);
      printf("received\n"); 
   }while(*addr);
   shmctl(shmid,IPC_RMID,0);
   exit(0);
}


main()
{
   int pid1,pid2;
   while((pid1 = fork()) == -1);
   if(pid1 == 0)
   {
      shmr();
      wait(0);
   }
   else
   {
      while((pid2 == fork()) ==-1);
      if(pid2 == 0)
      {
         shmw();
         wait(0);
      }
   }
}

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-12-21 22:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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