【问题标题】:On running my code is showing terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc在运行我的代码时显示在抛出 'std::bad_alloc' what() 实例后调用终止:std::bad_alloc
【发布时间】: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,对我来说就很容易了。

【问题讨论】:

  • 首先,您不应该使用那些糟糕的宏,例如pbll 等。这里的人必须阅读和理解您的代码,而使用这些宏并没有帮助。其次,tf 您使用了std::vector&lt;std::list&lt;int&gt;&gt; l; 而不是list &lt;int&gt;*l;,然后是l.at(i).push_back(j);,错误将作为std::out_of_range 异常显示给您。它与内存不足无关。这些可以进行自我诊断的代码编写技术无法从您使用的任何在线竞赛编码网站学习。

标签: c++ data-structures graph codeblocks bad-alloc


【解决方案1】:

您创建了一个包含四个列表空间的列表数组,然后尝试设置第八个条目的值。那是行不通的。

    Graph(int v)
    {
        this-> v = v;
        l = new list<int>[v];
    }

Graph g(4);

因此,这意味着g.l 有空间容纳四个编号为 0、1、2 和 3 的列表。

g.add_edge(7,4);

    void add_edge (int i , int j)
    {
        l[i].pb(j);
        l[j].pb(i);
    }

这会尝试设置l[7] 的值。但是l[3]l 中的最后一个元素。

另外,你确定你想要一个列表数组吗?

【讨论】:

  • 非常感谢您的回答。它确实奏效了。我只是在 cpp 中学习图表,这就是我选择这种方法的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多