为什么这个简单的链表程序会出现分段错误?
Why is this simple linked list program giving segmentation fault?
我只是想创建一个字符链表。这是代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node{
char data;
struct node *next;
};
void push(struct node** head,char ndata)
{
struct node* temp=(struct node*)malloc(sizeof(node));
temp->data=ndata;
temp->next=(*head);
*head=temp;
}
void display(struct node* head)
{
struct node* temp=head;
while(temp)
{
printf("%c ",temp->data);
temp=temp->next;
}
}
int main()
{
struct node* head;
int a=1;
push(&head,'a');
push(&head,'b');
push(&head,'c');
push(&head,'b');
push(&head,'a');
display(head);
getch();
return 0;
}
我正在使用 push() 函数在头部插入值。然后使用 display() 方法显示列表中的值。当我执行程序时,
它说 "program10.exe has stopped working"。
我不明白问题出在哪里。有人可以帮忙吗?
你没有初始化 head
所以它不是 null 但有一个垃圾值,所以它不会停止 display
函数中的循环,并尝试在那里取消引用垃圾。
这个:
struct node* head;
应该是:
struct node* head = NULL;
我只是想创建一个字符链表。这是代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node{
char data;
struct node *next;
};
void push(struct node** head,char ndata)
{
struct node* temp=(struct node*)malloc(sizeof(node));
temp->data=ndata;
temp->next=(*head);
*head=temp;
}
void display(struct node* head)
{
struct node* temp=head;
while(temp)
{
printf("%c ",temp->data);
temp=temp->next;
}
}
int main()
{
struct node* head;
int a=1;
push(&head,'a');
push(&head,'b');
push(&head,'c');
push(&head,'b');
push(&head,'a');
display(head);
getch();
return 0;
}
我正在使用 push() 函数在头部插入值。然后使用 display() 方法显示列表中的值。当我执行程序时, 它说 "program10.exe has stopped working"。 我不明白问题出在哪里。有人可以帮忙吗?
你没有初始化 head
所以它不是 null 但有一个垃圾值,所以它不会停止 display
函数中的循环,并尝试在那里取消引用垃圾。
这个:
struct node* head;
应该是:
struct node* head = NULL;