In your macro below, replace the VERY CONFUSING notation ** by the standard array notation and your program will work. change: for (Int_t i=0; i<n; i++) { tt1 = tt1 + 1 * *(w+i) * *(w+i); tt2 = tt2 + *(x+i) * *(x+i) * *(w+i) * *(w+i); tt3 = tt3 + *(x+i) * *(w+i) * *(w+i); tt4 = tt4 + *(y+i) * *(w+i) * *(w+i); tt5 = tt5 + *(y+i) * *(x+i) * *(w+i) * *(w+i); } to: for (Int_t i=0; i<n; i++) { tt1 = tt1 + 1 * w[i] * w[i]; tt2 = tt2 + x[i] * x[i] * w[i] * w[i]; tt3 = tt3 + x[i] * w[i] * w[i]; tt4 = tt4 + y[i] * w[i] * w[i]; tt5 = tt5 + y[i] * x[i] * w[i] * w[i]; } Rene Brun > Hi, > I tried to execute a macro("ytrack.C") that calls a function("sfit") but > it gives the following error message. > > To execute a macro("ytrack.C"), I typed > root [0] .x ytrack.C > > Is there something wrong with handling pointers in my function "sfit"? > In the sense of C it should be no problem. > > Or is there something wrong with handling function inside ROOT > interpreter? My function "sfit" does not return any value. It assigns a > value on variable that is in "ytrack.C" using pointer. > ^^^^^^^^^^^^^^ > Stand alone version of "ytrack.C" had no problem. > > ======================== Error message ============================== > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:10 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:10 > * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:11 > Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:11 > * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:12 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:12 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:12 > Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:12 > * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:13 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:13 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:13 > Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:13 > * Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:14 > Error: Illegal pointer operation (tovalue) FILE:ytrack.C LINE:14 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > @ Error: Illegal pointer operation (bstore:3) FILE:ytrack.C LINE:9 > > ================================ "ytrack.C" is ================ > // function declaration > void sfit(Int_t n,Float_t *x,Float_t *y,Float_t *w,Float_t *pb0,Float_t > *pb1); > > // function definition > void sfit(Int_t n,Float_t *x,Float_t *y,Float_t *w,Float_t *pb0,Float_t > *pb1) > { > > Float_t tt1,tt2,tt3,tt4,tt5,ss; > > tt1 = tt2 = tt3 = tt4 = tt5 = 0.; > > for (Int_t i=0; i<n; i++) { > tt1 = tt1 + 1 * *(w+i) * *(w+i); > tt2 = tt2 + *(x+i) * *(x+i) * *(w+i) * *(w+i); > tt3 = tt3 + *(x+i) * *(w+i) * *(w+i); > tt4 = tt4 + *(y+i) * *(w+i) * *(w+i); > tt5 = tt5 + *(y+i) * *(x+i) * *(w+i) * *(w+i); > } > > ss = tt1*tt2 - tt3*tt3; > > if (ss == 0) { > *pb0 = -999; > *pb1 = -999; > } > else { > *pb0 = (tt2*tt4 - tt5*tt3)/ss; > *pb1 = (tt1*tt5 - tt3*tt4)/ss; > } > } > > // main function > void ytrack() > { > Int_t noy; > > Float_t szzy[5]; > Float_t sypos[5]; > Float_t syesum[5]; > Float_t silyin; > Float_t b0,b1; > > ... processing data & assign values on noy,szzy,sypos,syesum > > //call function "sfit" > sfit(noy,szzy,sypos,syesum,&b0,&b1); > > silyin = b0 + b1*46.764; > printf("%g\n",silyin); > > } > ========================================================================== > > --- > Thanks a lot! > Jayoung Wu > >
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:30 MET