c ++中运行时的分段错误

时间:2014-04-22 04:47:57

标签: c++ segmentation-fault

我已确定当我为toString()调用LinkedList class方法时会发生错误,更具体地说,当执行第8行或第9行时

string LinkedList::toString() const
{
    int traverse=1;
    Node * that = head;
    string sout;

    while(size>=traverse)
    {
        sout += "value = "+that->s +" ";
        that = that->next;
        traverse++;

    }
    return sout;

}

这个LinkedList使用Node类来存储看起来像这样的数据,而LinkedList类本身有一个int size变量和一个指向第一个Node的指针

class Node
{
friend class LinkedList;
private:
    std::string s;
    Node * next;
    Node(std::string st, Node *nextn);
};

我猜这是我的一些愚蠢的noob错误,但我无法通过盯着它或重新阅读指针教程来解决它

2 个答案:

答案 0 :(得分:0)

如果没有查看完整的代码,我们无法猜测哪里可能出错。 对于当前代码,似乎下面的代码是错误的。请添加一个空检查日志

    that = that->next
    if(that ==null)

   {
       // std::cout<<"A null node found\n";
       break;
   }

答案 1 :(得分:0)

是基本问题是node *在某些时候是NULL。 1)Seg Fault第一次在循环中访问时出现.Cause:从它复制的那个头是空的。传递给这个方法的列表指针的chcek是正确的。 2)循环中几次迭代后的Segafult。原因:遍历条件不正确并超出列表最后一个节点,从而尝试访问NULL。

在任何一种情况下,您都可以尝试在循环中添加一些cout语句,并添加检查&#34;&#34;指针。