【问题标题】:I am getting Segmentation fault (core dumped) for below code.Please help me out [closed]我收到以下代码的分段错误(核心转储)。请帮助我[关闭]
【发布时间】:2015-07-10 12:04:00
【问题描述】:
void SortedInsert(struct node** headRef, struct node* newnode)
{
        struct node* current= *headRef;

        if(newnode->data<current->data)
        {
                newnode->next=current;
                *headRef=newnode;
        }
        else
        {
                current=current->next;                  
                while(current!=NULL)
                {

                        if(newnode->data<current->next->data)
                                break;

                current=current->next;
                }

                newnode->next=current->next;
                current->next=newnode;
        }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!请拨打tour 并阅读How to Ask 以了解我们对这里问题的期望。请提供 MCVE
  • 另外,您可以使用像gdb 这样的调试器来单步调试您的程序并查明有问题的指令。
  • 想想current 可能有什么值你循环while(current!=NULL)之后。

标签: c pointers


【解决方案1】:

考虑在列表末尾插入时的情况。然后你得到

// current = NULL
current->next = nextnode;
// is ((struct node*)NULL)->next = nextnode;

【讨论】:

    【解决方案2】:

    上面的代码不足以指出错误。

    但是,作为一般建议,有很多指针取消引用没有进行有效性 (NULL) 检查。请在取消引用之前添加一个检查以查看指针是否有效,因为NULL 被认为是指针的无效值并尝试取消引用会产生undefined behaviour。这有时会导致分段错误。

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2021-03-09
      • 2015-11-24
      相关资源
      最近更新 更多