Problema al ejecutar este código

Iniciado por TheFlash, 3 Enero 2017, 14:07 PM

0 Miembros y 1 Visitante están viendo este tema.

TheFlash

Espero que me podais echar una manilla porque por más que lo reviso no se donde puede estar el fallo ya que el código compila perfectamente, el problema está en que cuando lo ejecuto me salta una ventana emergente que dice que el programa dejó de funcionar. Mi hipótesis es que el fallo está en que el programa intenta acceder a una dirección de memoria a la que no tiene acceso por lo que el sistema operativo aborta automáticamente la ejecución del programa, pero como he dicho no se donde puede estar el fallo.

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std ;
class SecuenciaEnteros{
private:
  static const int TAMANIO = 50;
  long vector_privado[TAMANIO];
  int total_utilizados;
public:
     ......
};
class SecuenciaCaracteres{
private:
  static const int TAMANIO = 2e6;
  char vector_privado[TAMANIO];
  int total_utilizados;
  }

public:
    ............

FrecuenciaCaracter Moda(){
     
     SecuenciaCaracteres procesados;
     FrecuenciaCaracter moda;
     char caracter_actual;
SecuenciaEnteros conteo_frecuencia;
     bool encontrado;

     moda.frecuencia = 0;

     for (int i = 0 ; i < total_utilizados ; i++){
        caracter_actual = vector_privado[i];
        encontrado = false;
       
        for (int j = 0; j < procesados.TotalUtilizados() && !encontrado; j++){
           if (caracter_actual == procesados.vector_privado[j])
              encontrado = true;
        }

        if (! encontrado){
           procesados.Aniade(caracter_actual);
           conteo_frecuencia = procesados.PosicionesOcurrencias(caracter_actual, i, procesados.total_utilizados);

           if (conteo_frecuencia.TotalUtilizados() > moda.frecuencia) {
              moda.frecuencia = conteo_frecuencia.TotalUtilizados();
              moda.caracter   = caracter_actual;
           }
        }
     }

     return moda;
}

  SecuenciaEnteros PosicionesOcurrencias(char buscado, int izq, int der){
     SecuenciaEnteros conteo_frecuencia;

     for (int k = izq ; k <= der ; k++)
              if (buscado == vector_privado[k])
                 conteo_frecuencia.Aniade(k);

     return conteo_frecuencia;
  }
SecuenciaCaracteres Descodifica(){
SecuenciaCaracteres descodificado;
bool anterior_es_blanco;
int i, siguiente;

  i = 0;
  anterior_es_blanco = true;

  while (i < total_utilizados){
     siguiente = i+1;

     if (vector_privado[i] != ' '){
        if (anterior_es_blanco ||
           (siguiente < total_utilizados && vector_privado[siguiente] == ' ')){
             
           descodificado.Aniade(vector_privado[i]);
        }

        anterior_es_blanco = false;
     }
     else
        anterior_es_blanco = true;

     i = siguiente;
     
  return descodificado;
  }
  }
};
int main(){
  const char TERMINADOR = '#';
  char caracter;
  SecuenciaCaracteres mi_moda;
  FrecuenciaCaracter moda;

  //Entrada de datos
  cout << "Moda."
       << "\nIntroduzca caracteres con terminador " << TERMINADOR << "\n";
  caracter = cin.get();
  while(caracter != TERMINADOR && mi_moda.TotalUtilizados() < mi_moda.Capacidad()){
  mi_moda.Aniade(caracter);
  caracter = cin.get();
  }

  moda = mi_moda.Moda();


cout << "\nModa:       " << "<" << moda.caracter << ">"
       << "\nFrecuencia: " << moda.frecuencia;
}


He cortado un poco el código para que no sea tan largo ya que cada clase tiene multitud de métodos que no vienen al caso ahora. Comento un poco el objetivo del programa para que sepais por donde van los tiros más o menos. La idea es ir introduciendo caracteres en un vector creando un objeto de la clase SecuenciaCaracteres y que el método Moda() te calcule el caracter más repetido y su número de repeticiones.

*Nota: El ejercicio tiene que hacerse de la forma planteada,  ya que anteriormente ya he tenido que hacerlo de formas alternativas.

Por cierto, si podeis echarle un vistazo también al método Descodifica os lo agradecería, porque también me ha dado problemas en otro de los ejercicios.