Re: [ROOT] Segentation violation with calloc

From: Radovan CHYTRACEK (Radovan.Chytracek@cern.ch)
Date: Wed Jun 06 2001 - 18:57:52 MEST


Hi,
          I have tested the following macro with production version of
ROOT on CERN/AFS.
I got the same crash as the calloc version bellow. Compiled with G++ works
fine.

------------------------------ cut here --------------------------

typedef double*   DPtr;
typedef double**  DDPtr;
typedef double*** DDDPtr;


void TestMacro()
{
  DDDPtr massmatrn = new DDPtr[2];
  int    i,j,k;
  
  for (i = 0; i<2 ; i++) {
    massmatrn[i] = new DPtr[2];
  }
  
  for (j = 0; j<2 ; j++) {
    for (k = 0; k<2 ; k++) {
      massmatrn[j][k] = new double[2];
    }
  }
  
  for ( j = 0; j<2 ; j++) {
    for ( k = 0; k<2 ; k++) {
      delete [] massmatrn[j][k];
    }
  }
  
  for (i = 0; i<2 ; i++) {
    delete [] massmatrn[i];
  }
  
  delete [] massmatrn;
}

------------------------------ cut here --------------------------

Aurelien COTTRANT wrote:
> 
>  Hello,
> 
>  When I try this single sample of code, CINT crash with a segmentation
>  violation error. Without the references to massmatrn[i][j], it works
>  fine. I use ROOt ver 3.00/06. Could anyone help me
> 
>  void test()
>  {
> 
>  double ***massmatrn;
>  massmatrn =(double ***) calloc (2, sizeof(double**));
> 
>  for (int i = 0; i<2 ; i=i+1)
>          massmatrn[i] = (double **) calloc (2, sizeof(double*));
> 
>  for (int j = 0; j<2 ; j=j+1)
>          for (int i = 0; i<2 ; i=i+1)
>                  massmatrn[i][j] = (double *) calloc (2,
> sizeof(double));
> 
>  for (int i = 0; i<2 ; i=i+1)
>          for (int j = 0; j<2 ; j=j+1)
>                  free(massmatrn[i][j]);
> 
>  for (int i = 0; i<2 ; i=i+1)
>          free(massmatrn[i]);
> 
>  free(massmatrn);
> 
>  }
> 
>  Aurélien Cottrant




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