Ese código es basura en C++, como C está bien. Si es para practicar punteros, sigue con ello. Si no, bórralo, usa la STL. Aquí te he hecho muy rápidamente una plantilla matriz, con constructor y destructor, get y set para no liarte más. (Si la quieres dinámica, tampoco hay mucho problema).
Código:
#include <iostream>
#include <vector>
using namespace std;
template <class T>
class Matriz
{
public:
Matriz(int filas, int columnas, T valor) : x(filas), y(columnas)
{
int i,j;
vector<T> t;
for(i=0;i<filas;i++)
{
m.push_back(t);
for(j=0;j<columnas;j++) m[i].push_back(valor);
}
}
~Matriz()
{
}
T Get(int fila, int columna)
{
return m[fila][columna];
}
void Set(int fila, int columna, T valor)
{
m[fila][columna]=valor;
}
private:
vector< vector<T> > m;
int const x,y;
};
int main()
{
Matriz<int> m (3,3,0);
m.Set(1,1,5);
cout << m.Get(1,1) << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Compara tamaño, calidad y seguridad de ambas ;)