这是一个使用结构指针实现堆栈的简单程序。但是,在运行代码时,我的程序退出时未显示任何错误。
#include<stdio.h>
#include<stdlib.h>
#define maxsize 5
struct s
{
char array[maxsize];
int top;
};
typedef struct s stack;
int insert(stack *p)
{
char ch;
/*if(p->top==NULL)
{
p->top=-1;
}*/
if(p->top>=maxsize-1)
{
printf("Stack overflows on insertion\n");
}
else
{
printf("Enter the character to be inserted : ");
scanf("\n%c",&ch);
p->top++;
p->array[p->top]=ch;
}
}
int delete(stack *p)
{
if(p->top==-1)
{
printf("Stack underflows on deletion\n");
}
else
{
p->top--;
}
}
int display(stack *p)
{
int i;
if(p->top==-1)
{
printf("Stack is empty\n");
}
else
{
for(i=0;i<=p->top;i++)
{
printf("%c",p->array[i]);
}
printf("\n");
}
}
int main()
{
int c;
stack *p;
p->top=-1;
while(1)
{
printf("1--> INSERT 2--> DELETE 3--> DISPLAY\n");
scanf("%d",&c);
switch(c)
{
case 1:
insert(p);
break;
case 2:
delete(p);
break;
case 3:
display(p);
break;
default:
printf("ERROR : Invalid Choice");
}
}
}
该程序包含三个函数,用于压入,弹出和显示堆栈中的元素,最后一个主要功能是从此处执行函数调用的地方。
该程序已成功编译,但出现0个错误,但在运行时退出时未显示任何内容。
答案 0 :(得分:0)
声明时:
stack *p;
它只是声明一个指针。如果要使用指针,则需要分配内存-就像在这里所做的那样(这将导致段错误):
p->top=-1;
将第一行更新为以下内容:
stack *p = malloc(sizeof(stack));
malloc()将分配所请求的内存以供使用-动态分配的任何内容也应为free()'