【问题标题】:sorting linked list but getting segmentation fault排序链表但出现分段错误
【发布时间】:2023-03-18 15:00:06
【问题描述】:

每次我尝试运行这个程序时,当我尝试将链表中的所有数字从小到大排序时,我总是遇到分段错误,我发现它在 while 循环中的某个地方

while(marker_ptr->link()->link()!= NULL)
{
  minum = prev->link();
  temp=minum->link();
  prev->set_link(temp);
  minum->set_link(head_ptr);
  head_ptr=minum;
  marker_ptr=minum->link();
previouse_minimum(head_ptr);
    }

我不知道有什么问题

这是大部分代码,因此您可以在我使用它时获得一些上下文

node(
    const value_type& init_data = value_type( ),
    node* init_link = NULL
)
{ data_field = init_data; link_field = init_link; }

// Member functions to set the data and link fields:
    void set_data(const value_type& new_data) { data_field = new_data; }
    void set_link(node* new_link)             { link_field = new_link; }

// Constant member function to retrieve the data:
value_type data( ) const { return data_field; }

// Constant member functions to retreive the link:
    node* link( ) const          { return link_field; }

private:
value_type data_field;
node* link_field;
};

node* previouse_minimum(node*& head_ptr){
    node* cursor;
    node* minimum;
    node* prev;
    minimum=head_ptr;

    for(cursor=head_ptr; cursor != NULL; cursor=cursor->link())
      if(cursor->data() < minimum->data())
         minimum=cursor;

    cursor = head_ptr;
    prev = cursor;
   while(cursor->link() != minimum)
    {
      cursor = cursor->link();
      prev = cursor;

    }
    cout << prev->link()->data() << endl;
    return prev;

}

void sort(node*& head_ptr, node*& marker_ptr)
{
   node* print_ptr;
   node* prev = previouse_minimum(head_ptr);
   node* temp=NULL;
   node* minum;
   marker_ptr = head_ptr;

   while(marker_ptr->link()->link()!= NULL)
    {
      minum = prev->link();
      temp=minum->link();
      prev->set_link(temp);
      minum->set_link(head_ptr);
      head_ptr=minum;
      marker_ptr=minum->link();
      previouse_minimum(head_ptr);
    }
   for(print_ptr = head_ptr; print_ptr !=NULL; print_ptr = print_ptr->link())
   cout <<  print_ptr->data() << " ";

   cout << endl;

   }

【问题讨论】:

    标签: c++ sorting linked-list segmentation-fault


    【解决方案1】:

    这样做看起来很危险:

    while(marker_ptr->link()->link()!= NULL)
    

    列表末尾的节点没有链接,因此您正在尝试 null->link()。

    尝试改变它

    while(marker_ptr->link() != NULL && marker_ptr->link()->link() != NULL)
    

    并查看段故障是否仍然发生。 也许这会破坏算法,但你可以从那里进一步工作..

    顺便说一句;我现在因您的代码格式错误而头疼:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2013-11-12
      • 2015-03-24
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多