LinkedList分割故障的C 数组

C++ array of linkedlist segmentation fault

本文关键字:数组 故障 分割 LinkedList      更新时间:2023-10-16

我正在尝试修复一种方法,该方法采用链接列表的词根以及图中的顶点数,并将链接列表组织到基于链接列表的数组中例如,在边缘结构的第一个顶点上,在节点边缘的firvertex = 1,sndvertex = 2和weight = 2的结构中,它将被分类为数组的第一个元素。另一个带有另一个firvertex = 1的节点边缘将附加到上一个。等等。我已经修复了很多次,但是在运行时它仍会给出一个分段故障。

感谢您的提示,非常感谢。不幸的是,由于它是学校任务,所以我无法离开代码。

Edge* arrayList [numberVertices]

分配堆栈,而不是堆,而在功能末尾的范围内go go。

如果声明为本地数组,则变量arrayList。因此,在功能末尾被破坏,不应返回。您应该用新的:

动态分配它
Edge** arrayList = new Edge *[numberVertices];

通过您的编译器(如果正确配置)应警告您。这是g++ -Wall所做的:

bli.cpp: In function ‘Edge** _()’:
bli.cpp:5:9: warning: address of local variable ‘arrayList’ returned [-Wreturn-local-addr]
  Edge* arrayList[500];

这对我来说看起来很可疑:

for (int i=0; i<numberVertices; i++) { //initializes the array to NULL
   arrayList[numberVertices]=NULL;
}

您可能是指:

   arrayList[i]=NULL;

那么为什么不尝试stdlib?我个人建议避免使用指针。您可以使用参考(&amp;)。

,如果您有分割错误,您是否可以调试直到找到失败的线?

,您基本上会出现分割故障,因为您将边缘构造函数称为null作为根,然后尝试引用root-> next,但root为null ...