C++ 具有优先级队列的Dijkstra,分段错误

C++ 具有优先级队列的Dijkstra,分段错误,c++,segmentation-fault,C++,Segmentation Fault,我试图用优先级队列实现Dijkstra,但我一直遇到这种分段错误 我的实现如下所示: void dijkstra_pq_routine(Graph &g, int s, vector<int> &prio,vector<int> &pred) { std::cout << "init" << std::endl; int n = g.size(); prio.assign(n,INT_MAX); pr

我试图用优先级队列实现Dijkstra,但我一直遇到这种分段错误

我的实现如下所示:

void dijkstra_pq_routine(Graph &g, int s, vector<int> &prio,vector<int> &pred)
{
   std::cout << "init" << std::endl;
   int n = g.size();
   prio.assign(n,INT_MAX);
   prio[s] = 0;
   pred.assign(n,-1);
   priority_queue<pii,vector<pii>, greater<pii> > q;

   q.push(make_pair(0,s));

   while(!q.empty())
   {
       std::cout << "while" << std::endl;
       int d = q.top().first;
       int u = q.top().second;
       q.pop();
       if(d != prio[u])
       {
           std::cout << "if" << std::endl;
           //continue;
       }
       std::cout << "before for" << std::endl;
       for(int i = 0;i < (int) g[u].size(); i++)
       {
           std::cout << "for" << std::endl;
           int v = g[u][i].first;
           int nprio = prio[u] + g[u][i].second;
           if(prio[v] > nprio)
           {
               prio[v] = nprio;
               pred[v] = u;
               q.push(make_pair(nprio,v));
           }
      }
   }

   //int len = returnPathLength(prio,(int)g.size()-1);
   //return len;
 typedef pair<int, int> pii;
 typedef vector<vector<pii> > Graph;
似乎分段错误发生在For循环之前。 我希望有人能帮助我


提前谢谢

你试过调试吗?什么是dijkstra_pq()?只是我在初始化prio和predif(d!=prio[u])的例程之前调用的一个函数,你确定你没有越界吗?@swang是的。如果我能找到u和prio.size(),结果是:-prio.size():2u:0prio[u]:0-prio.size():2u:1prio[u]:1-prio.size():2u:1
int main()
{
     Graph g(2);
     g[0].push_back(make_pair(1, 3));
     g[0].push_back(make_pair(1, 1));
     dijkstra_pq(g);
}