jeudi 12 septembre 2019

I have a segmentation fault error and i cannot find why

im trying to make a 2d maze in console with c++11, but there is this segmentation fault error that doesńt let me generate the maze

I have tried to check all my pointers so im not trying to assign something to a null pointer

it might be in any of these methods:

i expect to generate the maze with 2 type of objects, empty and obstacle.

int Laberinto::ponerObjetoEnLaberinto(Objeto *objeto)
{
  bool seEncontro = true;
  for(int elemento=0; elemento< tablero.size(); elemento++)
  {
    if (objeto->get_fila()==tablero[elemento]->get_fila() and objeto->get_columna()==tablero[elemento]->get_columna())
    {
      cerr<<tablero[elemento]->comoTeLlamas()<<tablero[elemento]->get_fila()<<", "<<tablero[elemento]->get_columna()<<endl;
      Objeto *borrar=tablero[elemento];
      tablero[elemento]=objeto;
      delete borrar;
      cerr<<tablero[elemento]->comoTeLlamas()<<tablero[elemento]->get_fila()<<", "<<tablero[elemento]->get_columna()<<endl;

      //cerr<<"ejemplo: "<<tablero[150]->comoTeLlamas()<<endl;

      cerr<<tablero[elemento]->get_fila()<<", "<<tablero[elemento]->get_columna()<<endl;
      return elemento;
    }
    else
    {
      seEncontro=false;
    }     
  }
  if (seEncontro == false)
  {
  return -1;
  }
  else
  {
    cerr<<"no se pudo poner el objeto"<<endl;

  }
  /*Objeto *objeto=new Objeto(objeto->get_fila(), objeto->get_columna(), comoTeLlamas());
  int casilla = buscarCasilla(objeto);
  delete objeto;
  tablero[casilla]= vacia;  
  return vacia;*/
}

Objeto* Laberinto::queHayEnCasilla(int fila, int columna)
{
  for(int elemento=0; elemento< tablero.size(); elemento++)
  {
    if (fila==tablero[elemento]->get_fila() and columna==tablero[elemento]->get_columna())
    {
      //cerr<<"que hay en casilla: "<<tablero[elemento]->comoTeLlamas()<<endl;

    //cerr<<"nofunca"<<endl;
      //cerr<<"fila columna: "<<fila<<", "<<columna<<endl;
      //cerr<<"tablero chido: "<<tablero[elemento]->get_fila()<<", "<<tablero[elemento]->get_columna()<<endl;
      return tablero[elemento];     
    }
    else
    {
      //cerr<<"No se encontró ningún objeto en las coordenadas especificadas"<<endl;
    } 
  }


Objeto* Laberinto::borrarObjeto(Objeto *objeto)
{
  Objeto *vacia=new Vacia(objeto->get_fila(), objeto->get_columna());
  ponerObjetoEnLaberinto(vacia);
  //cerr<<objeto->comoTeLlamas()<<endl;
  //cerr<<"AAAAAAA";
  return vacia;
}

vector< pair<int,int> > Laberinto::crearCaminoAlAzar(int filaOrigen, int columnaOrigen, int filaDestino, int columnaDestino, int vertices){

  for(int numvertices = 0; numvertices<vertices;numvertices++)
  {

  }
  pair <int,int> vertice1 (filaOrigen, randint(0,ancho/2));
  pair <int,int> vertice2 (randint(0,alto),vertice1.second);
  pair <int,int> vertice3 (vertice2.first, randint(ancho/2,ancho));
  pair <int,int> vertice4 (filaDestino, vertice3.second);
  vector <pair<int,int>> coordenadas;
  pair <int,int> inicio (filaOrigen,columnaOrigen);
  coordenadas.push_back(inicio);
  for (int camino1=1;camino1<vertice1.second;camino1++)
  {
    coordenadas.push_back(pair <int, int> (filaOrigen,camino1));
  }
  coordenadas.push_back(vertice1);
  for (int camino2=vertice1.first;camino2<vertice2.first;camino2++)
  {
    coordenadas.push_back(pair <int, int> (camino2,vertice1.second));
  }
  coordenadas.push_back(vertice2);
  for (int camino3=vertice2.second;camino3<vertice3.second;camino3++)
  {
    coordenadas.push_back(pair <int, int> (vertice2.first,camino3));
  }
  coordenadas.push_back(vertice3);
  for (int camino4=vertice3.first;camino4<vertice4.first;camino4++)
  {
    coordenadas.push_back(pair <int, int> (camino4,vertice3.second));
  }
  coordenadas.push_back(vertice4);
  for (int camino5=vertice4.second; camino5<columnaDestino;camino5++)
  {
    coordenadas.push_back(pair <int,int> (filaDestino,camino5));
    cerr<<filaDestino<<", "<<camino5<<endl;
  }
  pair <int,int> final (filaDestino,columnaDestino);
  coordenadas.push_back(final);

    /*for (int contador = 0;contador<coordenadas.size();contador++)
  {  cerr<< coordenadas[contador].first<<" "<<coordenadas[contador].second<<endl;
  }
  */

  return coordenadas;



}

Aucun commentaire:

Enregistrer un commentaire