Memory Allocation Problem
Kevin Hill
kevin at crash.cts.com
Wed Jan 23 20:07:18 AEST 1991
I am still having problems with the malloc use in allocating memory
for a two dimensional array. I thank everyone that has been attempting
to help me with this.
As of now,
these are the variables outside of the function to follow:
int **track;
int **map;
char *bigmap;
int cursor,x1 = 0,y1 = 0,gx,gy;
WindowPtr thewind,thewind1;
WindowRecord windowmemory,windowmemory1;
BitMap themap1,store;
char iconmap[128];
Rect oldbox;
int **track;
int **map;
char *bigmap;
Initialize()
{
int x,y;
gx = gy = 0;
store.rowBytes = 4;
SetRect(&store.bounds,0,0,32,32);
if ( (bigmap = (char *)( malloc( (unsigned)(100 * 100 * 128)) )) == NULL)
ExitToShell();
track = (int **)malloc( (unsigned)(100 * sizeof(int *)) );
track[0] = (int *)malloc( (unsigned)( 100 * 100 * sizeof(int)) );
if (track[0] == NULL)
ExitToShell();
map = (int **)malloc( (unsigned)(100 * sizeof(int *)) );
map[0] = (int *)malloc( (unsigned)(100 * 100 * sizeof(int)) );
if (map[0] == NULL)
ExitToShell();
for (x = 1; x < 100; x++)
{
track[x] = track[x-1] + (100 * sizeof(int));
map[x] = map[x-1] + (100 * sizeof(int));
for (y = 0; y < 100; y++)
{
map[x][y] = -1;
track[x][y] = -1;
}
}
}
}
So that is the extent of the stuff that I have attempted. Now the problem is
that when the computer allocates using malloc, it returns very low address'
or very high address'. The low ones, which are the most common are standard,
and they are 0x000012A, is that an address to a master pointer list, and I need
to dereference that also? Also, when I complete the malloc to issue the
100 pointers for either of them, if I use the debugger to find the address
of track[0], track[1], it is still low. Is malloc buggy, or am I. I am betting
that I am the one that is buggy! Also, yes I did read the FAW sheet that
Steve Summit sent me, (FAQ not FAW, sorry) and question #20 is the only one
that applies to my question, and if you look at the code above, you will
see that I did follow it, and I think that I understand it.
For example, when track is allocated by the malloc statement, I am giving
memory space for the pointers that will point to the integers that I am trying
to store. Then after that, I put into track[0] the beginning of the space
of the actual 100x100 space for the integers of the two dimensional array.
The for loop below sets up the pointers to point to the correct places in
memory, and initializes the values of the pointers.
So, far, the machine crashes at the malloc points, sometimes. Or always, when
it gets to the actual initialization of the array. Yes, I know that if I have
the wrong address' I am overwriting areas that the system could be using, but
malloc should be sending back to me the correct address' and I believe that
I am using the right coding to create the two-dimensional arrays that I am using.
Thanks.
More information about the Comp.lang.c
mailing list