I'm having problems creating an array with a dynamic size using new.

Here is the relevant code:

enum LandCondition
{
	Bad,
	Good
};

//...

int IMG_WIDTH, IMG_HEIGHT;
LandCondition* land;

//...

land = new LandCondition[IMG_WIDTH][IMG_HEIGHT];//causes errors

The errors VC++ gives me are:
error C2540: non-constant expression as array bound
error C2440: '=' : cannot convert from 'LandCondition (*)[1]' to 'LandCondition *'

What's causing this? I've done things similar to this before without issues.

land = new LandCondition[IMG_WIDTH];
for(int i = 0; i < IMG_WIDTH; ++i)
  land[i] = new LandContion[IMG_HEIGHT];

Thanks, though I'm still having some problems. Does land now need to be a double pointer? I finally got the code to compile, but then I ran into a write error.

LandCondition** land;

//...

*land = new LandCondition[IMG_WIDTH];//runtime error

//...

for(int i = 0;i < IMG_WIDTH;i++)
	land[i] = new LandCondition[IMG_HEIGHT];

It's complaining that it can't write to location 0x0000000, which makes sense I guess, but I don't know how to resolve this.

Thanks, though I'm still having some problems. Does land now need to be a double pointer? I finally got the code to compile, but then I ran into a write error.

LandCondition** land;

//...

*land = new LandCondition[IMG_WIDTH];//runtime error

//...

for(int i = 0;i < IMG_WIDTH;i++)
	land[i] = new LandCondition[IMG_HEIGHT];

It's complaining that it can't write to location 0x0000000, which makes sense I guess, but I don't know how to resolve this.

land is to be a 2-dimensional dynamic array of dimensions IMG_WIDTH x IMG_HEIGHT? If so, try something like this:

LandCondition** land;
land = new LandCondition*[IMG_WIDTH];
for (int i = 0; i < IMG_WIDTH; i++)
{
    land[i] = new LandCondition[IMG_HEIGHT];
}
Comments
helpful

Yes, land should be:

LandCondition** land;

Then the code I posted, with the correction by VernonDozier.

This question has already been answered. Start a new discussion instead.