【发布时间】:2020-05-27 15:40:15
【问题描述】:
我在 C 中实现了一个堆栈,如下所示。并且该程序在三个推送中运行良好,但是当我尝试推送超过 3 个元素时,程序执行并且结果打印出来,但随后显示错误消息,指出 程序已停止工作
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX 50
//typedef char stackEntryType;
typedef enum{FALSE,TRUE} Boolean;
typedef struct stack{
int top;
int entry[MAX];
}stack;
void createStack(stack *s){
s->top=-1;
}
Boolean IsStackEmpty(const stack *s){
return(s->top==-1);
}
Boolean IsStackFull(const stack *s){
return(s->top==MAX-1);
}
void push(stack *s,int item){
if(IsStackFull(s)){
printf("Stack is full\n");
exit(1);
}else{
s->entry[++s->top]=item;
printf("%d pushed to stack\n",item);
}
}
void pop(stack *s)
{
int item;
if(IsStackEmpty(s))
{
printf("Stack is empty\n");
exit(1);
}
else{
item=s->entry[s->top--];
printf("%d popped from the stack",item);
}
}
void main()
{
stack *s;
createStack(&s);
push(&s,1);
push(&s,2);
push(&s,3);
push(&s,4);
pop(&s);
}
有人可以解决这个问题吗?
【问题讨论】:
-
这似乎是学习如何使用调试器的好时机。首先要捕获崩溃(这就是您所拥有的),找到它们在代码中发生的位置,并检查崩溃位置处所有相关变量的值。然后,您还可以使用它逐语句逐句执行代码,同时监视变量及其值以查看它们如何变化。
-
一个提示:在
main函数中&s的类型是stack **。不是createStack(或pop)所期待的,是吗?你的编译器应该能够发出警告,所以请听你的编译器。 -
作为@Someprogrammerdude 所说的额外建议,您可以使用this 非常酷的工具
标签: c data-structures stack