繁体   English   中英

C ++链表分割错误数组

[英]C++ array of linkedlist segmentation fault

我正在尝试修复一种方法,该方法采用一个函数,该函数采用链表的根和图中的顶点数,并基于边结构的第一个顶点将链表组织成链表的数组,在节点Edge的firVertex = 1,sndVertex = 2,权重= 2的结构中,它将被排序到数组的第一个元素中。 另一个具有另一个firVertex = 1的节点Edge将追加到前一个节点上,依此类推。我已对其进行了多次修复,但运行时仍出现分段错误。

感谢您的提示,非常感谢。 不幸的是,自从将代码分配给学校以来,我无法放弃它。

Edge* arrayList [numberVertices]

在堆栈而不是堆上分配,并在函数末尾超出范围。

变量arrayList如果声明为本地数组。 因此,is在函数末尾被销毁,不应返回。 您应该使用新的动态分配它:

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? 我个人建议避免使用指针。 您可以改用引用(&)。

如果您遇到了分段错误,您是否能够调试直到找到失败的行?

并且您基本上会遇到分段错误,因为您以NULL为根调用Edge构造函数,然后尝试引用root-> next,但是root为null ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM