在 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
.
下面是一个栈数据结构用链表在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
.