53清 发表于 2021-11-16 20:42:58

段错误,核心已转储

编程在主进程中创建两个子进程,在子进程 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);
      }
   }
}

export2 发表于 2023-12-5 06:43:21

会不会是因为第53行的pid2 == fork(),把赋值写成了等于{:10_254:}
页: [1]
查看完整版本: 段错误,核心已转储