[comp.sys.sgi] nurbssurface

mchee@lsr-vax.UUCP (Merkna Chee-Orts - LMO) (05/18/91)

Hello,
      I am hoping that someone may be able to help me with a problem I 
am having with the nurbssurface function.  If I create the array which
holds the control points using malloc or calloc, my program crashes giving
a bus error.  If that array has been statically allocated the program works.
I know that malloc or calloc do not allocate memory contiguously and so I
have allocated the memory for the 3D control points array from one large 
block of memory.  That however does not seem to solve the problem.  I have
listed the parts of my code which are pertinent.
				Thanks in advance.
					     Merk Na Chee-Orts

some declarations..

int NUM_SPOINTS;       /* # of control pts in s dimension */
int NUM_TPOINTS;       /* # of control pts in t dimension */
int NUMCOORDS;         /* # of coordinate space */
double ***ctl_pts;     /* pointer to array of control pts */
double ***dtensor();   /* function that allocates memory */

within the code ...

ctl_pts=dtensor(NUM_SPOINTS, NUM_TPOINTS, NUMCOORDS);

function dtensor....

double ***dtensor(n1, n2, n3)
int n1, n2, n3;
{
  int i, j, k, l;
  double *t, ***tt;

/* allocates a block of size (n1)*(n2)*(n3) */

  t=(double *)malloc((unsigned)(n1*n2*n3)*sizeof(double));
  if(!t)
  {
    printf("allocation failure in dtensor()\n");
    exit(0);
  }

  tt=(double ***)malloc((unsigned)n1*sizeof(double **));

  for(i=0; i<n1; i++)
    tt[i]=(double **)malloc((unsigned)n2*sizeof(double *));

  for(i=0; i<n1; i++)
  for(j=0; j<n2; j++)
    tt[i][j]=t+(n2*n3*i)+n3*j;
  return tt;
}

calling the nurbssurface function...

     bgnsurface();
      nurbssurface( 
      NUM_SKNOTS, sknots, 
      NUM_TKNOTS, tknots,
      sizeof(double)*NUM_TPOINTS*NUMCOORDS, 
      sizeof(double)*NUMCOORDS,
      ctl_pts, 
      ORDER, ORDER, 
      N_V3D
      );
     endsurface();

mchee@lsr-vax.UUCP (Merkna Chee-Orts - LMO) (05/20/91)

Hello,
      I am hoping that someone may be able to help me with a problem I 
am having when using the nurbssurface function.  If I create the array which
holds the control points using malloc or calloc, my program crashes giving
a bus error.  If that array has been statically allocated the program works.
I know that malloc or calloc do not allocate memory contiguously and so I
have allocated the memory for the 3D control points array from one large 
block of memory.  That however does not seem to solve the problem.  I have
listed the parts of my code which are pertinent.

				Thanks in advance.
					    

/* some declarations.. */

int NUM_SPOINTS;       /* # of control pts in s dimension */
int NUM_TPOINTS;       /* # of control pts in t dimension */
int NUMCOORDS;         /* # of coordinate space */
double ***ctl_pts;     /* pointer to array of control pts */
double ***dtensor();   /* function that allocates memory */

/* within the code ... */

ctl_pts=dtensor(NUM_SPOINTS, NUM_TPOINTS, NUMCOORDS);

/* function dtensor.... */

double ***dtensor(n1, n2, n3)
int n1, n2, n3;
{
  int i, j, k, l;
  double *t, ***tt;

/* allocates a block of size (n1)*(n2)*(n3) */

  t=(double *)malloc((unsigned)(n1*n2*n3)*sizeof(double));
  if(!t)
  {
    printf("allocation failure in dtensor()\n");
    exit(0);
  }

  tt=(double ***)malloc((unsigned)n1*sizeof(double **));

  for(i=0; i<n1; i++)
    tt[i]=(double **)malloc((unsigned)n2*sizeof(double *));

  for(i=0; i<n1; i++)
  for(j=0; j<n2; j++)
    tt[i][j]=t+(n2*n3*i)+n3*j;
  return tt;
}

/* calling the nurbssurface function...*/

     bgnsurface();
      nurbssurface( 
      NUM_SKNOTS, sknots, 
      NUM_TKNOTS, tknots,
      sizeof(double)*NUM_TPOINTS*NUMCOORDS, 
      sizeof(double)*NUMCOORDS,
      ctl_pts, 
      ORDER, ORDER, 
      N_V3D
      );
     endsurface();