AGRAWAL@rcgl1.eng.ohio-state.edu (Rajiv Agrawal) (12/04/89)
Hi, I have run into a small C problem on the Mac that I cannot fix. Can someone help me? I am posting the segment from the program. This program allocates a matrix. But the matrix entries change arbitrarily when I try to update the matrix. I have seen some discussions on HLock and memory management on the Mac and that might be the source of the trouble. I took the matrix allocation routine from Numerical Recipes in C book and it works correctly on the VAX. I am using THINK C 4.0 on a Mac II System 6.0.2. Thanks in advance. Rajiv. ------------------------------------------ #include <stdio.h> #include <stdlib.h> main() { int i,j,n; float **hessin; float **matrix(); n=2; /* work space */ hessin = matrix(1,n,1,n); /* initialize to a unit matrix */ for (i=1;i<=n;i++) { for (j=1; j<=n; j++) hessin[i][j]=0.0; hessin[i][i]=1.0; } printf("Old matrix\n"); for(i=1;i<=2;i++) printf("%f %f\n",hessin[i][1],hessin[i][2]); /* Add 2.0 to all the elements of the matrix */ for (i=1;i<=n; i++) for (j=1; j<=n; j++) hessin[i][j] += 2.0; /* BUGGY statement .... the second row of the matrix changes upon the first execution of this statement */ printf("New matrix\n"); for(i=1;i<=2;i++) printf("%f %f\n",hessin[i][1],hessin[i][2]); } /* Numerical recipes in C */ float **matrix(nrl,nrh,ncl,nch) int nrl,nrh,ncl,nch; /* Allocates a float matrix with range [nrl..nrh][ncl..nch] */ { int i; float **m; /* Allocate pointers to rows */ m=(float **) malloc((unsigned) (nrh-nrl+1)*sizeof(float*)); /* Allocate rows and set pointers to them */ for (i=nrl;i<=nrh;i++) { m[i]=(float *) malloc((unsigned) (nch-ncl+1)*sizeof(float)); m[i] -= ncl; } /* return pointer to array of pointers to rows */ return m; } ---------------------------------------------------------------------- Rajiv Agrawal (614) 292-9029 (614) 421-7970 206 W 18th Ave, Columbus, OH 43210 BITNET: TS5600@OHSTVMA INTERNET: agrawal@rcgl1.eng.ohio-state.edu rajiv@felix.eng.ohio-state.edu agrawal@porsche.eng.ohio-state.edu Being an Indian, I prefer to work 8-5 Indian Standard Time.
AGRAWAL@rcgl1.eng.ohio-state.edu (Rajiv Agrawal) (12/05/89)
Hi, Please ignore my previous message. As someone pointed out, I was missing the line: m -= nrl; after the allocation of the matrix. Rajiv. ---------------------------------------------------------------------- Rajiv Agrawal (614) 292-9029 (614) 421-7970 206 W 18th Ave, Columbus, OH 43210 BITNET: TS5600@OHSTVMA INTERNET: agrawal@rcgl1.eng.ohio-state.edu rajiv@felix.eng.ohio-state.edu agrawal@porsche.eng.ohio-state.edu Being an Indian, I prefer to work 8-5 Indian Standard Time.