这个链表程序中出现分段错误的原因是什么?
What is the reason for this segmentation fault in this Linked List program?
当我添加最后一个节点时,这个程序总是给我一个Segmentation Fault,可能是什么原因。它仅在添加最后一个节点时出现,我已经评论了出现分段错误的行。
我是编程新手。
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
struct node *createNode(int val){
struct node *ret=(struct node *)malloc(sizeof(struct node));
ret->data=val;
ret->next=NULL;
return ret;
}
struct node *addNode(struct node *ll,int val){
//Gives error here for the last node, it creates the node succesfull but this step give segmentation fault
struct node *new_node=createNode(val);
new_node->next=ll;
return new_node;
}
void printList(struct node *ll){
printf("printing list");
struct node *temp=ll;
while(temp->next){
printf("%d ->",temp->data);
temp=temp->next;
}
}
int main(){
struct node *head;
head=addNode(head,3);
head=addNode(head,5);
head=addNode(head,1);
head=addNode(head,9);
printList(head);
}
struct node *head;
head
未初始化,因此使用未初始化的变量会导致未定义的行为。在添加节点之前将 head
初始化为 NULL
。
struct node *head = NULL;
DO NOT CAST MALLOC AND FAMILY
分配给NULL
头。
struct node * head=NULL;
因为在 addnode 中你是这样做的,
new_node->next=ll;
然后在打印节点时使条件像这样,
while(node){
...
}
如果你使用 node>next
你将丢失链接列表中的最后一个值。
Don't cast malloc 和系列。
您遇到此问题是因为当您在 link 列表中添加新节点时,您是将此节点添加为 link 列表的开头。
最初:
struct node* head; //This is not NULL.Big mistake by you.But this is not the only problem.
出现段错误是因为您试图访问 printList()
中的无效内存位置,因为最后一个节点指针(您最初声明为 head
)未指向任何有效内存 location.Try 评论对 printList()
的调用你会看到错误 goes.But 这不是你正在寻找的解决方案,即使你将 head 初始化为 NULL
你将面临最后一个节点得不到 printed.for 这个用法的问题:-
while(temp)
在 printList()
.
当我添加最后一个节点时,这个程序总是给我一个Segmentation Fault,可能是什么原因。它仅在添加最后一个节点时出现,我已经评论了出现分段错误的行。 我是编程新手。
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
struct node *createNode(int val){
struct node *ret=(struct node *)malloc(sizeof(struct node));
ret->data=val;
ret->next=NULL;
return ret;
}
struct node *addNode(struct node *ll,int val){
//Gives error here for the last node, it creates the node succesfull but this step give segmentation fault
struct node *new_node=createNode(val);
new_node->next=ll;
return new_node;
}
void printList(struct node *ll){
printf("printing list");
struct node *temp=ll;
while(temp->next){
printf("%d ->",temp->data);
temp=temp->next;
}
}
int main(){
struct node *head;
head=addNode(head,3);
head=addNode(head,5);
head=addNode(head,1);
head=addNode(head,9);
printList(head);
}
struct node *head;
head
未初始化,因此使用未初始化的变量会导致未定义的行为。在添加节点之前将 head
初始化为 NULL
。
struct node *head = NULL;
DO NOT CAST MALLOC AND FAMILY
分配给NULL
头。
struct node * head=NULL;
因为在 addnode 中你是这样做的,
new_node->next=ll;
然后在打印节点时使条件像这样,
while(node){
...
}
如果你使用 node>next
你将丢失链接列表中的最后一个值。
Don't cast malloc 和系列。
您遇到此问题是因为当您在 link 列表中添加新节点时,您是将此节点添加为 link 列表的开头。
最初:
struct node* head; //This is not NULL.Big mistake by you.But this is not the only problem.
出现段错误是因为您试图访问 printList()
中的无效内存位置,因为最后一个节点指针(您最初声明为 head
)未指向任何有效内存 location.Try 评论对 printList()
的调用你会看到错误 goes.But 这不是你正在寻找的解决方案,即使你将 head 初始化为 NULL
你将面临最后一个节点得不到 printed.for 这个用法的问题:-
while(temp)
在 printList()
.