队列声明导致std :: bad_alloc

时间:2016-12-28 10:59:39

标签: c++ bad-alloc

我写了这段代码并抛出:

terminate called after throwing an instance of 'std::bad_alloc'
what():  std::bad_alloc
Aborted (core dumped)

每当我在queue<int> q函数中声明deque<int> q1(或shortest_reach())时,我都会收到此错误,并且只要我对该行发表评论,代码就可以正常运行。我没有给出非常大的输入(因此它不需要大内存),但我仍然得到这个错误。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <deque>
#include <queue>

using namespace std;

class Graph {
    vector <vector <int> > adj;
    public:
        Graph(int n) {
            adj.reserve(n);            
        }

        void add_edge(int u, int v) {
            adj[u].push_back(v);
            adj[v].push_back(u);            
        }

        void shortest_reach(int start, int n, vector<int> &dist) {
            // queue<int> q;
            // deque<int> q1;                               

        }

};

int main() {
    int queries;
    cin >> queries;

    for (int t = 0; t < queries; t++) {

      int n, m;
        cin >> n;
        // Create a graph of size n where each edge weight is 6: 
        Graph graph(n);
        cin >> m;
        // read and set edges
        for (int i = 0; i < m; i++) {
            int u, v;
            cin >> u >> v;
            u--, v--;
            // add each edge to the graph
            graph.add_edge(u, v);
        }
      int startId;
        cin >> startId;
        startId--;
        // Find shortest reach from node s
        vector<int> distances(n); 
        graph.shortest_reach(startId, n, distances);

        for (int i = 0; i < distances.size(); i++) {
            if (i != startId) {
                if(distances[i]!=0)
                    cout << distances[i]*6 << " ";
                else
                    cout << -1 << " ";
            }
        }
        cout << endl;
    }

    return 0;
}

这是我提供的输入:

2
4 2
1 2
1 3
1
3 1
2 3
2

第一行告诉测试用例的数量,然后描述每个测试用例。每个测试用例的第一行包含图中顶点和边的数量,边沿在以下行中描述。每个测试用例的最后一行指定了我必须执行的某个任务的起始顶点。

注意:我已经尝试在两台不同的计算机上运行它,我也遇到了同样的错误。

0 个答案:

没有答案