Поскольку массив не является указателем . Массивы распадаются на указатели на их первые элементы, но это происходит только на первом уровне: двумерный массив превращается в указатель на одномерный массив, но это не так - он не превращается в указатель на указатель .
operator new[]
позволяет выделять динамический массив размера, известного только во время выполнения, но он позволяет выделять только одномерные массивы. Если вы хотите выделить динамический двумерный массив, вам нужно сделать это в два этапа: сначала выделить массив указателей, затем для каждого указателя выделить еще один одномерный массив. Например:
char **map = new char*[10]; // allocate dynamic array of 10 char*'s
for(int i = 0; i < 10; i++)
map[i] = new char[10]; // allocate dynamic array of 10 char's
Затем, чтобы освободить массив, вы должны освободить все в обратном порядке:
for(int i = 0; i < 10; i++)
delete [] map[i];
delete [] map;