【发布时间】:2021-03-08 02:28:48
【问题描述】:
我的代码是用 C++ 实现的图形。我从网站上复制了我的代码,但是当我尝试在本地 IDE 上运行它时,它会抛出一个错误。
#include<iostream>
#include<vector>
#include<list>
#define pi 3.14159
#define ll long long
#define pb push_back
#define pf push_front
using namespace std;
class Graph{ // Graph class
int v;
list <int> *l;
public:
Graph(int v)
{
this-> v = v;
l = new list<int>[v];
}
void add_edge (int i , int j)
{
l[i].pb(j);
l[j].pb(i);
}
void show_adj()
{
for(int i = 0 ; i < v ; i++)
{
cout << i << "->";
for(int a : l[i])
{
cout << a << ",";
}
cout << "\n";
}
}
};
int main() // main body
{
Graph g(4);
g.add_edge(7,4);
g.add_edge(7,3);
g.add_edge(3,1);
g.add_edge(4,1); // adding an edge
g.show_adj(); //showing the edges
//vector<int> v;
//int t; cin >> t;
//while(t--)
//{
//
//}
return(0);
}
我的代码正在显示
在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc
我收集到这与内存不足或变量脱离main() 函数有关,但我不知道在这种特定情况下如何解决问题。如果相关,我正在使用 Windows 计算机。
请帮我找出问题所在。
如果你能贴出代码sn-ps,对我来说就很容易了。
【问题讨论】:
-
首先,您不应该使用那些糟糕的宏,例如
pb、ll等。这里的人必须阅读和理解您的代码,而使用这些宏并没有帮助。其次,tf 您使用了std::vector<std::list<int>> l;而不是list <int>*l;,然后是l.at(i).push_back(j);,错误将作为std::out_of_range异常显示给您。它与内存不足无关。这些可以进行自我诊断的代码编写技术无法从您使用的任何在线竞赛编码网站学习。
标签: c++ data-structures graph codeblocks bad-alloc