Объявление очереди, вызывающее 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
В первой строке указывается количество тестов, затем описывается каждый тест. Первая строка каждого теста содержит количество вершин и ребер в графе, а ребра описаны в следующих строках. Последняя строка каждого теста указывает начальную вершину для некоторой задачи, которую мне пришлось выполнить.
Примечание: я попытался запустить его на двух разных машинах, и я получаю ту же ошибку.