c++ 声明向量时出现分段错误(内核转储)

uxhixvfz  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(126)

我一直在尝试使用向量,但是每当我全局声明它们时,我会得到一个分段错误(核心转储)错误。但是当我在我声明的向量上指定一个大小时,错误不再发生。如果动态分配发生在向量中,那么为什么需要给出一个大小?这个错误是什么?请有人解释一下。
该代码用于使用向量实现邻接列表(图):

#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;
  }
wpx232ag

wpx232ag1#

std::vector不会在索引时自动调整大小。您需要使用resize手动调整大小。

u5rb5r59

u5rb5r592#

你需要到resize你vector之前使用象vector[i] .为这你能使用resize函数定义在stl vector class .
例如
对于n x m向量,使用vector_name.resize(n,vector<int>(m))

相关问题