为什么我的堆栈实现不工作并给出错误“Segmentation fault(core dumping)”下面是代码'
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *head, *newNode, *temp;
head = 0;
int choice=1;
while(choice)
{
newNode = (struct node *)malloc(sizeof(struct node));
printf("Enter Data: \n");
scanf("%d", &newNode->data);
newNode->next = 0;
if (head == 0)
{
head=newNode;
}
else{
temp->next=newNode;
temp=newNode;
}
printf("Do You Want to Continue(0,1)?\n");
scanf("%d",&choice);
}
temp=head;
while(temp!=0){
printf("%d",temp->data);
temp=temp->next;
}
return 0;
}
我试图实现链接列表,但收到错误“分段错误(内核转储)”
2条答案
按热度按时间kmynzznz1#
错误在行中
您必须为
temp
分配空间,或者将temp
更改为指向已分配的内存块-temp
未初始化,因此它指向随机内存。由于您尚未为temp
分配内存,更改temp->next
将更改属于其他位置的内存,这将导致分段错误。放进去
ff29svar2#
对于初学者来说,你并没有实现一个栈,因为你并没有试图在栈的顶部添加新的节点,你只是试图实现一个单链表。
至于这个else语句中的问题则
使用了具有不确定值的未初始化指针
temo
。请参见其声明所以这句话
调用未定义的行为。
您需要在if语句中初始化它
如果您确实想实现一个堆栈,那么您应该编写以下代码来代替if-else语句
在这种情况下,您将使用LIFO(最后输入-第一输出)数据结构。
注意,当不再需要堆栈时,应释放所有已分配的内存。