Объявление очереди, вызывающее std::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 ответов

Другие вопросы по тегам