[comp.sys.mac.programmer] Strange Pointer Behavior

rg2c+@andrew.cmu.edu (Robert Nelson Gasch) (12/03/90)

Hi,
I'm using ThinkC 3.0 and am experiencing some very strange behavior with
some pointers that I'm using.

I'm using a datatype genearray defined as follows:
typedef struct{
		short genes [MAXGENE];
		int	num;
		int ID;
		short int c_rate;
		short int m_rate;
		int maxage;
		}genetype, *geneptr;
typedef geneptr genearray [MAXSPECIES];

the function createnewgenes is supposed to allocate 1 pointer in genearray:
geneptr createnewgenes (thisgeneptr)
geneptr thisgeneptr;
{
	int x;
										/* allocate new pointer to genes */
	thisgeneptr = (geneptr) malloc (sizeof (genetype));
	for (x=0; x<MAXGENE; x++)
		thisgeneptr->genes[x] = 0;		/* initialize genes to zero (blank) */
	return (thisgeneptr);
}


for the following function, the global variables are set up as follows:
extern landscapetype landscape;
extern genearray genes;
extern int numorgs, numorgtypes, maxage, maxageID;

void do_reproduce (x, y)
int x, y;
	{
	geneptr temporg;
	int ID = landscape[x][y].ID[0], found_ID = EMPTY;

	numorgs += 1;	
	if (rand()%genes[ID]->m_rate == 0) 					/* mutate */
		{
		numorgtypes += 1;
		temporg = createnewgenes (temporg);
		do_mutate (temporg, ID);
  more_stuff_is_done
 }
}

Now here's the problem that I discovered using the debugger:
The parameters are passed in correctly, the variables declared properly so
everything seems to be going OK. When I call
    temporg = createnewgenes (temporg);
temporg is initialized properly, but so is genearray[0] (which has been
allocated previously by a call to createnewgenes). I have no idea why
allocating temporg interferes with the state of genearray[0] (they are 2
seperate entities after all). 
    Any ideas??

Thanx alot --> Rob