>>116
newだと最上位の要素数以外はコンパイル時に決まっている必要がある。
で、どうするかというと、
int n = 8;
int *p = new[5 * n];
としてp[y * n + x]などと手動で指定したり、std::vector<std::vector<> >やboost::multi_arrayを使ったりする。

operator newの返り値がvoid *なのは、まだただのメモリの塊に過ぎないから。
そこへコンパイラがコンストラクタを動かして初めて何らかの型へのポインタになる。
(たとえintなどの組み込み型でも概念としてはそうなる)