在 C 的堆栈中调用 display() 函数时不显示正确的输出

Not displaying proper output when display() function is called in stack in C

下面是一个栈数据结构用链表在C中的实现

#include <stdio.h>
#include <stdlib.h>

struct stack
{
    int data;
    struct stack *next;
};
struct stack *top = NULL;

void push(int d)
{
    struct stack *nptr;
    nptr = (struct stack *)malloc(sizeof(struct stack));
    if (top == NULL)
    {
        nptr->data = d;
        nptr->next = NULL;
        top = nptr;
    }
    else
    {
        nptr->data = d;
        nptr->next = top;
        top = nptr;
    }
}
void display()
{
    while (top != NULL)
    {
        printf("%d\n", top->data);
        top = top->next;
    }
}

void pop()
{
    struct stack *temp = top;
    top = top->next;
    free(temp);
}

int main()
{
    push(5);
    push(6);
    push(7);
    pop();     // This works fine
    display(); // This works as well
    pop();     // The element does not pop when called.
    display(); // The stack does not display.
    return 0;
}

程序的最终输出为:

6
5

shell returned -1073741819

程序的实际输出应该是:

6
5
5

我在程序中找不到任何错误,但输出与预期不符。请帮帮我。谢谢

第一次调用 display() 时,您会破坏堆栈。
这是因为您操作了一个全局变量,此后应该保持不变。
您的 pop() 不检查 NULL 并且在 display() 之后的调用中无条件取消引用确实是 NULL 的指针,因为 display() 的不当行为并且没有保护针对意外 NULL.