Amiga.org
		Operating System Specific Discussions => Amiga OS => Amiga OS -- Development => Topic started by: Glaucus on November 13, 2002, 02:42:21 AM
		
			
			- 
				Please, someone educate me here!!!
 
 I originally wrote some C code to allocate a matrix:
 
 UBYTE (*BrickBuffer)[MAX_GRIDX][MAX_GRIDY];
 BrickBuffer = AllocMem(sizeof(*BrickBuffer), 0L);
 
 This works fine.  I then tried to make the above work using the new operator in C++:
 
 UBYTE (*BrickBuffer)[MAX_GRIDX][MAX_GRIDY];
 BrickBuffer = new(UBYTE[MAX_GRIDX][MAX_GRIDY]);
 
 The above gets me this error is SAS6.58:
 Src/LevelData.cpp 354 Error 1544: ( unsigned char (*)[58][41]) = ( unsigned char (*)[41]): Invalid type for binary operator.
 
 Okay, why is it doing this to me?!!?  I obviously don't understand how the new() operator works here. So how does one dynamically allocate a matrix in C++ using new()?!?!?  Any suggestions???
 
 - Mike
 
- 
				Your sample code is a bit confusing - are you allocating a 2D array of objects? if so, try this:
 
 UBYTE **BrickBuffer;
 int i;
 
 BrickBuffer = new UBYTE*[MAX_GRIDX];
 for (i = 0;i < MAX_GRIDX;i++)
 BrickBuffer = new UBYTE[MAX_GRIDY];
 
 You can then use the array as usual, eg BrickBuffer
 
 when deleting the array, do it like this:
 
 for (i = 0;i < MAX_GRIDX;i++)
 delete[ ] BrickBuffer;
 
 delete[ ] BrickBuffer;
 
 SAS/C implements an older version of the C++ standard, but I don't think even newer compilers support anything other than new, new[] and new().
- 
				Okay thanks, I'll give that a shot tomorrow.
 
 I always assumed that the new operator could be used to allocate a matrix (which is what I was attempting to do in the first place).  Now it seems you need to allocate each column seperatly.
 
 - Mike