0

共有メモリを使用して、2 つの異なる子プロセスを使用して配列の要素を追加していますが、出力は間違っていません。そして、セグメンテーション違反が発生します。

 int main()
{
int a[100],i,k,s1=0,s2=0,lim=100;
int status1,status2;
pid_t pid1,pid2;
int perm=S_IRWXU|S_IRWXG|S_IRWXO;
int fd=shmget(IPC_PRIVATE,1024,IPC_CREAT|perm);
if(fd<0)
{
    printf("error");
    _exit(0);
}
 int* sum=(int*)shmat(fd,NULL,0);
if(*sum==-1)
{
    printf("error\n");  
    _exit(0);
}
*sum=0;

for(i=0;i<lim;i++)
{
a[i]=i;
    }


if((pid1=fork())==0)
{
    for(i=1;i<lim;i+=2)
    {
    s1 += a[i];
    }
    exit(s1);
}
else if((pid2=fork())==0)
{
    for(i=0;i<lim;i+=2)
    {
    s2+= a[i];
    }
    exit(s2);
}
else 
{
    printf("the elements of array are\n");
    for(i=0;i<lim;i++)
    printf("%d\t",a[i]);

    waitpid(pid1, &status1, 0);
    *sum = *sum+WEXITSTATUS(status1);
    waitpid(pid2, &status2, 0);
    *sum = *sum+ WEXITSTATUS(status2);

    printf("\nSum of all members of the array: %d\n", *sum);
}
return 0;
 }

これにより、出力が得られます:配列のすべてのメンバーの合計: 342 なぜ?

4

1 に答える 1