Graph 有人能解释为什么这是一个错误吗?

Graph 有人能解释为什么这是一个错误吗?,graph,adjacency-list,Graph,Adjacency List,这是我代码的链接。如果我通过为每一行使用迭代器来简单地打印列表,它可以工作,但在循环中,它给出了分段错误 #include<bits/stdc++.h> using namespace std; list<int> *adj = new list<int>[5]; void addEdge(int v,int w) { adj[v].push_back(w); } int main() { addEdge(1,2); addEdge(2

这是我代码的链接。如果我通过为每一行使用迭代器来简单地打印列表,它可以工作,但在循环中,它给出了分段错误

#include<bits/stdc++.h>
using namespace std;
list<int> *adj = new list<int>[5];
void addEdge(int v,int w)
{
    adj[v].push_back(w);
}
int main()
{
    addEdge(1,2);
    addEdge(2,3);
    addEdge(3,4);
    addEdge(4,5);
    addEdge(5,2);
    for(int i =1;i<6;i++)
    {
        list<int>::iterator j;
        for(j = adj[i].begin();j!=adj[i].end();++j)
        {
            cout<<*j<<endl;
        }
    }
    return 0;
}
#包括
使用名称空间std;
list*adj=新列表[5];
无效补遗(整数v,整数w)
{
形容词[v]。推回(w);
}
int main()
{
增编(1,2);
增编(2,3);
增编(3,4);
增编(4,5);
增编(5,2);

对于(int i=1;i在
adj
上可用的数组的可接受索引范围是
0..4
,而不是
1..5
C
-类似于语言的语言倾向于使用基于偏移量的索引

外部
for
循环超出了可用的索引范围。当您在内部
for
循环中引用
adj[5]
时,程序崩溃。您引用的是堆上不具有的地址


今后,请尝试在诸如
gcc
之类的调试器中运行该程序,或使用诸如
valgrind
之类的工具(它允许您跟踪内存使用和访问).

adj
上可用的数组的可接受索引范围是
0..4
,而不是
1..5
C
-类似于语言的语言倾向于使用基于偏移量的索引

外部
for
循环超出了可用的索引范围。当您在内部
for
循环中引用
adj[5]
时,程序崩溃。您引用的是堆上不具有的地址

以后,请尝试在诸如
gcc
之类的调试器中运行该程序,或使用诸如
valgrind
之类的工具(它允许您跟踪内存使用和访问)