Tarea 3 - observación

Es posible simular una matriz de n filas y m columnas usando un arreglo de n × m elementos mediante la siguiente fórmula:

   int main( ) {
      int memoria[3 * 5];            // simulando una matriz de 3 filas por 5 columnas
      int i, j;
      std::cin >> i >> j;
      int v = memoria[i * 5 + j];    // equivalente a acceder a la fila i, columna j (nótese que el número de filas no aparece en la fórmula, pero el número de columnas sí)
   }

Si quieren tener un apuntador que "no apunte a ningún lado" y quieren poder detectar esto fácil (por ejemplo, para una matriz vacía tal vez no quieran pedir memoria), pueden hacer lo siguiente:

   int main( ) {
      int* p = nullptr;             // intencionalmente "no apunta a ningún lado" (apuntador nulo)
      if (p == nullptr) {
         std::cout << "p no apunta a memoria valida";
      }
   }

Usar lo anterior no es realmente necesario, ya que podrían checar si el número de filas o columnas de la matriz es cero para saber si habían pedido memoria o no (o de plano pedirle a new un arreglo de tamaño 0, lo cual es válido), pero ésta es otra alternativa. Es seguro ejecutar delete[] sobre un apuntador nulo.

Un tipo de excepción bastante genérico que podrían usar es std::runtime_error. Revisen las alternativas aquí.