结构程序停止,没有任何错误

时间:2019-09-23 19:54:53

标签: c pointers data-structures stack

这是一个使用结构指针实现堆栈的简单程序。但是,在运行代码时,我的程序退出时未显示任何错误。

#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个错误,但在运行时退出时未显示任何内容。

1 个答案:

答案 0 :(得分:0)

声明时:

  stack *p;

它只是声明一个指针。如果要使用指针,则需要分配内存-就像在这里所做的那样(这将导致段错误):

   p->top=-1;

将第一行更新为以下内容:

   stack *p = malloc(sizeof(stack));

malloc()将分配所请求的内存以供使用-动态分配的任何内容也应为free()'