在为链表实现附加功能时出现分段错误

时间:2014-02-03 21:31:21

标签: c linked-list segmentation-fault

我将头部定义为全局变量。用户输入应该附加到单个链接列表的整数。我实现了append函数,但它给了我一个分段错误。

void Append(int x)
{
    struct Node *temp, *current;
    temp = (struct Node*)malloc(sizeof(struct Node));
    temp -> data = x;


    temp -> next = NULL;

    if(head->next ==NULL)
    {
            head = temp;

    }
    else{

            //current = (struct Node*)malloc(sizeof(struct Node));
            current = head;
            while(1)//current != NULL)
            {
                    if(current->next ==NULL)
                    {
                            current =current -> next;
                            printf("added to the end\n");
                            break;
                    }

                    current = current -> next;
            }
    }
}

主要功能如下:

int main()
{
    //create empty List
    head =NULL;

    printf("How many numbers?\n");
    int n,i,x;
    scanf("%d",&n);
    for(i =0; i<n; i++)
    {

            printf("Enter the number\n");
            scanf("%d",&x);
            //Insert(x);
            Append(x);
            Print();
    }
    return 0;
} 

3 个答案:

答案 0 :(得分:1)

你设置为null

head =NULL;

下次访问时,您正试图访问其中一个属性

if(head->next ==NULL)

你不能这样做,因为没有head->next因为head为空

答案 1 :(得分:0)

由于您将head初始化为NULL,因此该行会导致错误:

if(head->next ==NULL)

当您尝试访问next指针的成员NULL时。

要解决此问题,请在致电head之前分配Append,或在head内检查NULL Append

答案 2 :(得分:0)

//插入(X)=&GT;启用此选项并更新有效的头节点。如果不在Append()函数中,if(head-&gt; next)应该更改为if(head)。这是头指针必须在访问下一步之前验证..