环路条件下的分段故障



下面的代码是在创建链表后对其进行排序。使用的排序算法与Bubble sort有点相似。我正在检查两个连续的节点,并在必要时交换它们。我使用了调试器,它告诉我在对排序时使用的循环进行条件检查时引发了故障。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
using namespace std;
struct link_list
{
       char value[20];
       struct link_list *next;
};
int main()
{
    struct link_list *head=NULL;
    int i,j;
    char input[20];
    char ch;
    struct link_list *loop_var,*temp2,*prev_node,*temp4=NULL;
    temp3=NULL;
    do
    {
        cout<<"nEnter the string you want to insert";
        cin>>input;
        cout<<"nDo you want to continue entering?";
        cin>>ch;
        if  (head==NULL)
        {
            head=new link_list;
            strcpy(head->value,input);
            head->next=NULL;
            continue;
        }
        for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next);
        temp2=new link_list;
        loop_var->next=temp2;
        strcpy(temp2->value,input);
        temp2->next=NULL;
    }while(ch=='y' || ch=='Y');
    for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next)
    {
        cout<<loop_var->value<<"n";
    }
    cout<<loop_var->value<<"n";
    char arr[20];
    for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next)
    {
        cout<<"nLoop1";
        for (temp4=head;temp4->next!=NULL;temp4=temp4->next)
        {
            cout<<"nLoop2";
            temp2=temp4;
            if  (strcmp(temp2->value,temp2->next->value)>0)
            {
                cout<<"nSwap Enter";
                if  (temp2==head && temp2->next->next==NULL)
                {
                    cout<<"nSpecial1";
                    temp2->next->next=temp;
                    temp2->next=NULL;
                }
                else if (temp2==head)
                {
                     cout<<"nSpecial2";
                     head=temp2->next;
                     temp2->next=head->next;
                     head->next=temp2;
                }
                else if (temp2->next->next==NULL)
                {
                     cout<<"nSpecial3";
                     prev_node->next=temp2->next;
                     prev_node->next->next=temp2;
                     temp2->next=NULL;
                }
                else
                {
                    cout<<"nNormal1";
                    prev_node->next=temp2->next;
                    temp2->next=prev_node->next->next;
                    prev_node->next->next=temp2;
                    cout<<"nNormal2";
                }
            }
            prev_node=temp4; 
            cout<<"nLoop2PreExit";
            fflush(stdin);
            cout<<"nLoop2Exit";
        }
        cout<<"nLoop1Exit";
    }
    for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next)
    {
        cout<<loop_var->value<<"n";
    }
    cout<<loop_var->value;
    getch();
}
                    temp2->next->next=temp;

"temp"在任何地方都没有定义。。。如果你的编译器为你填补了这个漏洞,那么这就是导致循环条件segfault的原因。

此外,将每个其他变量命名为"temp#"是一种容易出错的方法。

相关内容

  • 没有找到相关文章

最新更新