2017-05-10 1 views
-6

J'ai écrit ce code pour le code de graph.This est la compilation avec succès mais quand je le lance montre Segmentation fault (core dumped)C++ erreur: Segmentation fault (core dumped)

Ce code est l'impression adjacente du graphique à l'aide Printgraph function.How résoudre cette erreur?

class graph{ 
    public: 
     std::vector< std::vector<int> > list; 
     int n; 
     graph(int n){ 
      this->n=n; 
      list.resize(n); 
     } 
     void addEdge(int a,int b){ 
      list[a].push_back(b); 
      list[b].push_back(a); 
     } 
     void printGraph(){ 
      std::vector< std::vector<int> >::const_iterator vertex; 
      std::vector<int>::const_iterator adjacent; 
      int i=0; 
      for(vertex=list.begin();vertex != list.end() ; ++vertex) 
      { 
       std::cout<<"Adjacent of "<<i<" is : "; 
      for(adjacent = vertex->begin();adjacent != vertex->end();++adjacent){ 
       std::cout<<*adjacent<<" "; 
      } 
      i+=1;  
      std::cout<<"\n"; 
      } 
       } 
    }; 

main(){ 
    graph gh(5); 
    gh.addEdge(1,2); 
    gh.addEdge(1,3); 
    gh.addEdge(2,4); 
    gh.addEdge(2,5); 
    gh.addEdge(3,5); 
    gh.addEdge(4,5); 
    gh.addEdge(4,6); 
    gh.addEdge(5,6); 
    gh.printGraph(); 
    return 0; 
} 
+1

Avez-vous essayé un débogueur? –

+0

qu'est ce que le débogueur? –

+1

[Un débogueur est un outil logiciel] (https://en.wikipedia.org/wiki/Debugger) qui vous permet de contrôler l'exécution d'un programme et d'en vérifier l'état. – user4581301

Répondre

0

Dans votre principale vous définissez gh(5) qui attribue le vecteur de la taille 5, vous utilisez votre méthode addEdge avec le paramètre (5,6) qui tente d'accéder list[5] mais les cinq entrées de la liste sont list[0],list[1],list[2],list[3], et list[4]. Donc je suppose que gh.addEdge(5,6) donne la faute de Segmentation car elle est hors de portée de votre vecteur.

+0

Merci beaucoup! –