我正在使用共享内存使用两个不同的子进程添加数组的元素,但输出没有错。我得到一个分段错误。
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 为什么?