2016-09-15 107 views
0

我是新来的数据结构,并开始与链接列表,我试图在链表添加元素,但得到错误分段错误。 我正在用C语言实现它。错误:分段错误(代码转储)

我不明白这是什么错误意味着

CODE:

struct node 
{ 
int data; 
struct node *next; 
}; 
struct node *head; 
void fnInsert(int x){ 
    if(head==NULL){ 
    printf("head is null"); 
    node* temp=(node*)malloc(sizeof(struct node)); 
    temp->data=x; 
    temp->next=head; 
    head=temp; 
    } 
    else{ 
     node* temp=head; 
     struct node* previousNode; 
     do{ 
      temp=temp->next; 
      previousNode=temp; 
     }while(temp!=NULL); 
     node* temp1=(node*)malloc(sizeof(struct node)); 
      temp1->data=x; 
      previousNode->next=temp1; 
      temp1->next=NULL; 
    } 
}; 
void fnPrint(){ 
    struct node* temp=head; 
    printf("list is:\n"); 
    while(temp!=NULL){ 
     printf("%d",temp->data); 
     temp=temp->next; 
     printf("\n"); 
    } 
} 
int main(){ 
    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); 
     fnInsert(x); 
     fnPrint(); 
    } 
} 

任何帮助,将不胜感激。

+0

分段错误意味着代码访问无效内存。使用调试器来帮助您找到问题。 – kaylum

+0

@kaylum 我在网上做这个,所以没有选项可以调试:( –

+0

你有家用电脑吗?很多调试工具都可以免费下载。 – kaylum

回答

5

的错误是在这些行:

temp=temp->next; 
previousNode=temp; 

它应该是相反的,即

previousNode=temp; 
temp=temp->next; 

在你的情况previousNode最终成为NULL和您试图访问previousNode->next即提领一NULL指针。所以这是一个分段错误。

你在很多地方也使用过node*。您应该用struct node*替换它们全部或者您可以typedef