C 为什么使用链表堆叠的程序不起作用?

C 为什么使用链表堆叠的程序不起作用?,c,linked-list,stack,C,Linked List,Stack,代码编译得很好,但当我尝试弹出或显示推送的整数值时,它崩溃了!谢谢你帮助我 #include<stdio.h> #include<stdlib.h> struct node { int data; struct node* next; }*top=NULL; void push(int); void pop(); void display(); void main() { int choice,value; while(1){ printf("\n-

代码编译得很好,但当我尝试弹出或显示推送的整数值时,它崩溃了!谢谢你帮助我

#include<stdio.h>
#include<stdlib.h>
struct node
 {
int data;
 struct node* next;
}*top=NULL;

 void push(int);
  void pop();
 void display();



 void main()
{
int choice,value;
while(1){
printf("\n-----MENU-----\n");
printf("\n1. Push\n2. Pop\n3. Display\n4. Exit");
printf("\nEnter your choice\n");
scanf("%d",&choice);
switch(choice)
{
    case 1:  printf("Enter a number to push\n");
    scanf("%d",&value);
    push(value);
    break;
    case 2: pop();
    break;
    case 3: display();
    break;
    case 4: exit(0);
}}
getch();
 }
函数从列表中弹出一个值

    void pop()
    {

   if (top==NULL)
  {
  printf("Nothing to delete");
 }
 else{
struct node *temp=top;
printf("Deleted element %d", temp->data);
top=temp->next;
free(temp);
}}
用于显示堆叠元素的函数

 void display()
{
if(top==NULL)
{
    printf("List is empty\n");
}
else
{
    struct node *temp=top;
    while(temp->next!=NULL)
    {
        printf("%d",temp->data);
        temp=temp->next;
    }
    printf("%d ----->NULL", temp->data);
  }
 }

您忘记设置
top
在插入第一个元素后,更改为(也不要忘记验证您的分配状态):


使用调试器。这是调试此类问题的最佳方法。在
printf
中添加结尾
\n
(或调用
fflush(NULL);
)。使用所有警告和调试信息编译(
gcc-Wall-g
)。使用调试器
gdb
逐步运行程序。还可以使用
if(top==NULL){newnode->next=NULL;
-->
if(top==NULL){newnode->next=NULL;top=newnode;
newnode->next=top;top=newnode;printf(“插入成功\n”);}
-->
newnode->next=top;}top=newnode;printf(“插入成功\n”)所以不是其他人调试和做作业的地方。在编程时,发现bug是一项基本(但困难)技能。因此,您需要做家庭作业,并学习如何使用调试器。顺便说一句,你的“修复我的代码”问题在这里是离题的。因此,这里是离题的,甚至还有一个菜单元素来关闭它。这是大多数代码被关闭的问题最常见的原因之一。我投票决定结束它,我相信你的问题将在一天内结束。调试技能(包括你头脑中的诀窍,以及像
gdb
这样使用调试器的能力)是你应该学习的一部分。
 void display()
{
if(top==NULL)
{
    printf("List is empty\n");
}
else
{
    struct node *temp=top;
    while(temp->next!=NULL)
    {
        printf("%d",temp->data);
        temp=temp->next;
    }
    printf("%d ----->NULL", temp->data);
  }
 }
void push (int value) {
  struct node *newnode = malloc(sizeof(struct node));
  if (newnode==NULL) { /* error */ }
  newnode->data=value;
  newnode->next=top;
  top=newnode;
  printf("Insertion successful\n");
}