Структура программы останавливается без ошибок - PullRequest
0 голосов
/ 23 сентября 2019

Это простая программа для реализации стека с использованием структурных указателей.Однако при запуске кода моя программа завершает работу без каких-либо ошибок.

#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 голосов
/ 23 сентября 2019

Когда вы объявляете:

  stack *p;

Это просто объявление указателя.Вам нужно выделить память, если вы хотите использовать указатель - как вы делаете здесь (это будет segfault):

   p->top=-1;

Обновите первую строку следующим образом:

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

malloc() выделит запрошенную память для использования - все, что динамически выделяется, также должно быть свободным () 'd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...