【问题标题】:Segmentation Fault at runtime in c++c++中运行时的分段错误
【发布时间】:2014-04-23 15:19:06
【问题描述】:

我已经确定当我为我的LinkedList class 调用toString() 方法时发生错误,更具体地说是在执行第 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 大小变量和一个指向第一个 Node 的指针

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

我猜这是我的一些愚蠢的菜鸟错误,但我无法通过盯着它或重新阅读关于指针的教程来弄清楚

【问题讨论】:

  • 尝试添加条件while(size>=traverse && that )
  • 现在这是一种非常不习惯、不正确和令人费解的遍历链接列表的方式……

标签: c++ segmentation-fault


【解决方案1】:

如果不查看完整代码,我们无法猜测哪里可能出错。 对于当前代码,下面的代码似乎有问题。请添加日志以进行空检查

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

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

【讨论】:

    【解决方案2】:

    是的,基本问题是节点 * 在某些时候为 NULL。 1)在循环中的第一次迭代中第一次访问时的段错误。原因:从它被复制的头是空的。传递给这个方法的列表指针的检查是正确的。 2)在循环中经过几次迭代后的 Segafult。原因:遍历条件不正确,超出列表最后一个节点,从而试图访问 NULL。

    在任何一种情况下,您都可以尝试在循环中添加一些 cout 语句,并添加对“that”指针的检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2013-09-13
      相关资源
      最近更新 更多