Pointer-to-member operator and member functions

Federico Carminati (Federico.Carminati@cern.ch)
Tue, 21 Jul 1998 18:46:44 +0200 (METDST)


Dear RooTers,
me and Marek Kowalsky found this interesting example:

void Check(Float_t *p[]);
void test8()
{
//
// test for the array of pointers
//

Float_t *p[2];
p[0] = new Float_t[2];
p[1] = new Float_t[2];

*p[0] = 1;
printf("p01 = %d %f\n",p[0],*p[0]);
p[0]++;
*p[0] = 2;
printf("p02 = %d %f\n",p[0],*p[0]);

Check(p);
}
void Check(Float_t *p[])
{
printf("p02 = %d %f\n",p[0],*p[0]);
p[0]--;
printf("p01 = %d %f\n",p[0],*p[0]);
//
// So far so good...
//
(*p[0]) = 7;
printf("p01 = %d %f\n",p[0],*p[0]); // and here it crushes!!

}

This works as expected. But if you remove the brackets around *p[0] used
as an lvalue, is p[0] which is assigned the value of 7, and the next line
bombs. Note that *p[0] works well as a left value few lines above in the
main program, but NOT in the procedure check. Any hint? Thanks,

Federico Carminati

==============================================================================
|| ||
|| _/_/_/_/_/_/_/ _/_/_/_/ _/ ||
|| _/ _/ _/ _/ _/ ||
|| _/ _/ _/ _/ ||
|| _/_/_/_/_/_/ _/ _/ _/ ||
|| _/ _/ _/ _/ ||
|| _/ _/ _/ _/_/_/_/_/ ||
|| _/ _/ _/ _/ _/ ||
|| _/ _/_/_/_/ _/ _/ ||
|| ||
==============================================================================
|| Federico Carminati || Tel.: +41.22.767.4959 ||
|| CERN-EP || Fax.: +41.22.767.9075 ||
|| 1211 Geneva 23 || ||
|| Switzerland || ||
==============================================================================