c - Sum of adding the elements of an array gives me the wrong output? -


i using shared memory add elements of array using 2 different child processes out put not wrong. , segmentation fault.

 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 members of array: %d\n", *sum); } return 0;  } 

this giver me out put:sum of members of array: 342 why?

int a[10],i,k,s1=0,s2=0,lim=100; 

and then

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

you're writing (and in children reading) outside array bounds, invoking undefined behaviour. trying explain result further pointless.

after fixed, still don't correct result, obvious candidate reason try transmit partial sums per

exit(s1); 

the specification exit() in section 7.22.4.4 of standard says:

finally, control returned host environment. if value of status 0 or exit_success, implementation-defined form of status successful termination returned. if value of status exit_failure, implementation-defined form of status unsuccessful termination returned. otherwise status returned implementation-defined.

one common thing exit status in range 0 255 used, and

prelude> sum [1, 3 .. 99] 2500 prelude> 2500 `mod` 256 196 prelude> sum [0, 2 .. 99] 2450 prelude> 2450 `mod` 256 146 prelude> 196 + 146 342 

your result sum of remainders of partial sums modulo 256.


Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -