C ++数组的链表分段故障

时间:2014-01-31 20:35:11

标签: c++ arrays pointers linked-list segmentation-fault

我正在尝试修复一个方法,该方法采用一个函数,该函数采用链表的根和图中的顶点数,并根据边结构的第一个顶点将链表组织成链表的数组例如,在节点Edge具有firVertex = 1,sndVertex = 2和weight = 2的结构中,它将被排序到数组的第一个元素中。另一个节点具有另一个firVertex = 1的节点将被附加到前一个节点等等。我已经修复了很多次但它在运行时仍然会出现分段错误。

感谢您的提示,非常感谢。不幸的是,我不能保留代码,因为它的学校作业。

3 个答案:

答案 0 :(得分:1)

Edge* arrayList [numberVertices]

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

答案 1 :(得分:0)

变量arrayList如果声明为本地数组。因此在函数结束时被销毁,不应该返回。您应该使用new:

动态分配它
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;

答案 2 :(得分:0)

那你为什么不尝试StdLib?我个人建议避免使用指针。 你可以使用引用(&amp;)代替。

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

并且您基本上会出现分段错误,因为您调用Edge构造函数为NULL作为根,然后尝试引用root-&gt; next,但root为null ...