RE:CINT Problem with 3dim Arrays?

From: Masaharu Goto (MXJ02154@nifty.ne.jp)
Date: Mon Jan 17 2000 - 13:33:01 MET


Hello Constantin,

This is one of cint limitation. Here are a couple of workarounds.

# WORKAROUND1, using dynamic array allocation feature 
 Cint allows to allocate dynamic array if declared in command line or
 unnamed macro. Using this feature, your macro can be simply written
 as follows.  

{
   float *x;
   int i,j,k;
   int fnummer=5;
   int kappanr=10;
   int tnr=20;
   // dynamic array can be allocated only within unnamed macro
   float y[fnummer][kappanr][tnr];
   x=new float[tnr];
   for(i=0;i<tnr;i++) x[i]=i;
   for(i=0;i<fnummer;i++){
     for(j=0;j<kappanr;j++) {
       for(k=0;k<tnr;k++){
         y[i][j][k]= i*10000+j*100+k;
         printf("%f ",y[i][j][k]);
       }
     }
   }   
   printf("test finished\n");
   for(i=0;i<fnummer;i++){
     for(j=0;j<kappanr;j++) {
       for(k=0;k<tnr;k++){
         if(y[i][j][k] != i*10000+j*100+k) printf("error\n");
       }
     }
   }   
   printf("test finished\n");
}

# WORKAROUND2, using temp pointer
  If you want the code to be both compiled and interpreted, you need to
  use temp pointer variable as follows. 

{
   float *x;
   float ***y,**ppy,*py;
   int i,j,k;
   int fnummer=5;
   int kappanr=10;
   int tnr=20;
   x=new float[tnr];
   for(i=0;i<tnr;i++) x[i]=i;
   y=new float**[fnummer];
   for(i=0;i<fnummer;i++){
     y[i]=new float*[kappanr];
     ppy = y[i];
     for(j=0;j<kappanr;j++) {
       ppy[j] =new float[tnr];
       py = ppy[j];
       for(k=0;k<tnr;k++){
         py[k] = i*10000+j*100+k;
         printf("%f ",py[k]);
       }
     }
   }   
   printf("test finished\n");
   for(i=0;i<fnummer;i++){
     ppy = y[i];
     for(j=0;j<kappanr;j++) {
       py = ppy[j];
       for(k=0;k<tnr;k++){
         if(py[k] != i*10000+j*100+k) printf("error\n");
       }
     }
   }   
   printf("test finished\n");
}

Thank you
Masaharu Goto

>
>Hallo,
>it seems, that CINT can't handle the following piece of code:
>
>{
>   float *x;
>   float ***y;
>   int i,j,k;
>   int fnummer=5;
>   int kappanr=10;
>   int tnr=20;
>   x=new float[tnr];
>   for(i=0;i<tnr;i++) x[i]=i;
>   y=new float**[fnummer];
>   for(i=0;i<fnummer;i++){
>    y[i]=new float*[kappanr];
>        for(j=0;j<kappanr;j++)
>        {
>         y[i][j]=new float[tnr];
>     for(k=0;k<tnr;k++){
>          y[i][j][k]=0;
>          printf("%f ",y[i][j][k]);
>         }
>        }
>   }   
>   printf("test finished\n");
>}
>
>The code works perfectly with gcc 2.91. I am using
>CINT which came with  
>Root Version   2.20/06  18 December 1998.
>Is there anything I can do to make that run?
>
>Thanks,
>C. Loizides
>
>------------------------------------------------------------------
>Institut fuer Theoretische Physik
>Tel: +49-69-798-22552
>
>PGP: http://www.rz.uni-frankfurt.de/~loizides/pgp/pgp.html
>
>



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET