C 获取用于创建6个以上子进程的共享内存时出错

C 获取用于创建6个以上子进程的共享内存时出错,c,fork,C,Fork,我试图理解c语言中的fork是如何工作的。我试图解决的问题是;给定f(上),我试图找到f(1)+f(2)+。。f(上)。 我想做多进程编程,让每个子进程都有fork,让每个子进程都计算f(x) 所以f(1),f(2)。。。f(上限)由每个子进程计算 父进程应计算以下f(1)+..+f(上)。 这是我的密码 #include <sys/types.h> #include <stdio.h> #include <unistd.h> #include<sys/

我试图理解c语言中的fork是如何工作的。我试图解决的问题是;给定f(上),我试图找到f(1)+f(2)+。。f(上)。 我想做多进程编程,让每个子进程都有fork,让每个子进程都计算f(x)

所以f(1),f(2)。。。f(上限)由每个子进程计算

父进程应计算以下f(1)+..+f(上)。 这是我的密码

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include<sys/shm.h>
#include<sys/ipc.h>

int upper = 0;
int n = 0;

int main(int argc, char*argv[]){
    pid_t pid;
    if(argc != 2){
      printf("Input one argument");
      return -1;
    }
    upper =  atoi(argv[1]);


    int segment_id;
    int *s;
    pid_t *pids;
    pids = (pid_t *) malloc(sizeof(int) * upper);
    s = (int *) malloc(sizeof(int) * upper);


    key_t key = 4141;
    if((segment_id = shmget(key, upper * sizeof(int), IPC_CREAT | 0667))< 0) perror("shmget: failure");

    if((s = shmat(segment_id, NULL, 0)) == (char *) -1){
      perror("shmat : failure");
      exit(1);
    }
    for(int i = 1; i <= upper; i++){
      pid = fork();
      if(pid == 0) {
        n = i;
        break;
      }
      pids[i] = pid;
    }

    if(pid > 0){
      wait(1 * upper);
      int totalSum;
      for(int i = 0; i < upper; i++){
        totalSum += s[i];
      }
  printf("Total sum = %d", totalSum);


} else {
  sleep(2);
  int sum = 0;
  for(int i = 0; i <= n; i++){
    sum += i;
  }
  s[n - 1] = sum;
  printf("n => %d : sum %d\n", n, sum);

}
}
#包括
#包括
#包括
#包括
#包括
整数上限=0;
int n=0;
int main(int argc,char*argv[]){
pid_t pid;
如果(argc!=2){
printf(“输入一个参数”);
返回-1;
}
上限=atoi(argv[1]);
int段_id;
int*s;
pid_t*pid;
pid=(pid_t*)malloc(sizeof(int)*上限);
s=(int*)malloc(sizeof(int)*上限);
键=4141;
如果((段id=shmget(键,上限*sizeof(int),IPC|u create | 0667))<0)peror(“shmget:failure”);
如果((s=shmat(段id,NULL,0))==(字符*)-1){
perror(“shmat:失败”);
出口(1);
}
对于(int i=1;i 0){
等待(1*上限);
整数和;
for(int i=0;i对于(inti=0;i您在
pids

pids = (pid_t *) malloc(sizeof(int) * upper);
...
for(int i = 1; i <= upper; i++){
  pid = fork();
  if(pid == 0) {
    n = i;
    break;
  }
  pids[i] = pid; /* Here */
}
pids=(pid_t*)malloc(sizeof(int)*上限);
...

对于(inti=1;i)这个
等待(1*upper);
的想法是什么?
for(int i = 1; i < upper; i++){