错误:分段错误(代码转储)
问题描述:
我是新来的数据结构,并开始与链接列表,我试图在链表添加元素,但得到错误分段错误。 我正在用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();
}
}
任何帮助,将不胜感激。
答
的错误是在这些行:
temp=temp->next;
previousNode=temp;
它应该是相反的,即
previousNode=temp;
temp=temp->next;
在你的情况previousNode
最终成为NULL
和您试图访问previousNode->next
即提领一NULL
指针。所以这是一个分段错误。
你在很多地方也使用过node*
。您应该用struct node*
替换它们全部或者您可以typedef
分段错误意味着代码访问无效内存。使用调试器来帮助您找到问题。 – kaylum
@kaylum 我在网上做这个,所以没有选项可以调试:( –
你有家用电脑吗?很多调试工具都可以免费下载。 – kaylum