【问题标题】:segmentation fault while appending a linked-list [closed]附加链表时出现分段错误[关闭]
【发布时间】:2016-01-03 04:35:32
【问题描述】:

我试图在链表末尾附加一个节点,但出现分段错误。我无法弄清楚我的错误在哪里。任何帮助和建议将不胜感激!

#include<stdio.h>
#include<stdlib.h>

struct node{
            int data;
            struct node *next;
    }*head;
    void append(int x)
    {
            struct node *temp1,*right;
            temp1=malloc(sizeof(struct node));
            temp1->data=x;
            right=malloc(sizeof(struct node));
            right=head;
            while(right->next != NULL )
            right=right->next;
            right->next=temp1;
            right=temp1;
            right->next=NULL;
    }                                                                             
    void print(){
            struct node *temp=head;
            printf("List is: ");
            while( temp!=NULL )
            {
                    printf(" %d",temp->data);
                    temp=temp->next;
            }
            printf("\n");
    }

    int main(){
            struct node *temp;
            int n,i,x;
            head=NULL;//empty list;

            printf("how many numbers?\n");
            scanf("%d",&n);

            for(i=0;i<n;i++){
                    printf("\nEnter the number\n");
                    scanf("%d",&x)
                    append(x);
                    print();
            }
    }

【问题讨论】:

  • head=NULL;,并且在此之后永远不会被写入..它确实从中读取,这可能是段错误。在调试器中运行它并发布回溯的输出
  • 如果您没有使用调试器单步调试您的代码,则说明您没有投入足够的精力。
  • 谢谢!我弄错了!

标签: c segmentation-fault singly-linked-list


【解决方案1】:

在您的函数append 中,您取消引用指向NULL 的指针-

right=malloc(sizeof(struct node));
right=head;
while(right->next != NULL )
....

由于head 指向NULL,然后您通过right 指向head,所以基本上通过right-&gt;next 您取消引用指向NULL 的指针。这就是为什么你可能会遇到 seg fault 。

您还为right 分配内存并在指向head 导致内存泄漏(避免此类事情)之后松散引用它。

这可以通过head分配内存后指向right来避免-

head=right;

【讨论】:

  • 谢谢!我弄错了!
  • @prajwalsanket 很高兴有帮助:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2015-05-18
相关资源
最近更新 更多