[ROOT] CINT bug introduced between ROOT version 3.00.06 and 3.01.05

From: Patois Yannick (patois@ganil.fr)
Date: Sun Jun 10 2001 - 19:58:29 MEST


Hi rooters,

First, thanx again to René, Masaharu Goto and others who answered to my
past questions.

But, of course, I have another one:

The following code compile and run as expected under g++ (changing
'bug101' to 'main') but unexpectingly crash under ROOT/CINT:

<<<< File bug101.C
class A
{
public:
  A(void) {
      fA= new int*[2];
      fA [0]=0xA1A1;
      fA [1]=0x1515;}
  ~A(void){delete fA;}
  int **Get(void) {return fA;}
private:
  int **fA;
};

void bug101(void)
{
  for (int i=0;i<2;i++)
  {
    A a;
    int **t=a.Get();
    cout <<t<<" "<<t[0]<<" "<<t[1]<<endl;
  }
}
>>>>

(Of course dont expect the class A to have any purpose ;)
Output of gcc (complaining about some int to pointer trick at
compilation, but we understand why):
0x8049c98 0xa1a1 0x1515
0x8049c98 0xa1a1 0x1515

ROOT version 3.00.06:
root [0] .x bug101.C
0x87c7040 0xa1a1 0x1515
0x87c7040 0xa1a1 0x1515

ROOT version 3.01.05:
root [0] .x bug101.C
0x87f7fe8 0xa1a1 0x1515
0xa1a1 
 *** Break *** segmentation violation
Root > Function bug101() busy flag cleared

The wrong pointer is returned (fA[0] instead of fA).

The problem seems to arise from the creation of the object in the 'for'
loop.

Thanx for your attention.

	Yannick



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:49 MET