2016-05-16 71 views
-8

我一直在嘗試使用向量,但是無論何時我全局聲明它們,我都會遇到分段錯誤(核心轉儲)錯誤。但是,當我在聲明的矢量上指定大小時,錯誤不再發生。如果向量中發生動態分配,那麼爲什麼需要給出一個大小以及這個錯誤是什麼?請有人解釋一下。聲明向量時出現分段錯誤(核心轉儲)

的代碼用於執行使用矢量鄰接表(圖)的:

#include <iostream> 
#include <vector> 
using namespace std; 
typedef vector<int> vi; 
typedef vector<vi> vii; 
vii adjlist; 
int main() 
{ 
     int n,m; // no. of vertices and no. of edges 
     cin>>n>>m; 
     for(int i =0;i<m;i++) 
     { 
      int p,q; 
      cin>>p>>q; 
      adjlist[p].push_back(q); 
      adjlist[q].push_back(p); 
     } 
     for(int i =0;i<n;i++) 
     { 
      cout<<i; 
      for(int j =0; j< (int)adjlist[i].size();++i) 
      { 
         cout<<"_>"<<adjlist[i][j]; 
       } 
      cout<<endl; 
     } 
    return 0; 
    } 
+0

爲什麼當vector是一個'C++'類時,你將它標記爲'C'?另外,請顯示您的代碼。 – PaulMcKenzie

+7

你的問題是「我寫了一些代碼,它不起作用,請解釋一下」。沒有代碼 - >沒有幫助! – John3136

回答

0

std::vector不會自動調整,當你索引它。您需要使用resize手動調整它的大小。

相關問題