Cita: //con try-catch
try {
tabla = new int * [n];
}
catch (bad_alloc &e) {
//error
}
Bien señalado ;). Y otra cosa mas: Si ya habías reservado memoria antes, al saltar el error no basta con comprobar, en caso de error había que liberar toda la memoria anteriormente revesada para evitar fugas ya que si el programa se rompe no le iba dar tiempo de llamar a los delete.