[英]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.