Looks fine to me, but yeah...2D Arrays are evil. It's better to just wrap an m * n 1D array in a class and just overload the operator() to get the correct elements.
What @darkestfright said. You need to declare the array with width*height elements and make an accessor function, like this:
1 2 3 4 5 6 7 8 9 10 11 12 13
struct array_2d{
int width;
int height;
myType* array;//you could use a template for this
array_2d(int w,int h){
width=w;
height=h;
array=new myType[w*h];}
~array_2d(){
delete[] array;}
myType& operator()(int x,int y){
return array[y*width+x];}};//this is the accessor formula