Привет, ваша реализация стека неверна. Используя gdb, вы можете проверить это . Вы передаете структуру в качестве значения, которое вы должны передать как адрес .
На GDB выможно увидеть
в главном gdb) p & stack1 $ 4 = (stack *) 0x7fffffffddf0
в толчке fn
(gdb) p & st $ 3 = (stack *) 0x7fffffffdd90
оба различны.
правильный код указан ниже.
#include <stdio.h>
#define SIZE 10
typedef struct stack
{
int top;
int items[SIZE];
}stack;
void push(int a, stack *st)
{
if((st->top + 1) != SIZE)
{
st->top++;
st->items[st->top] = a;
}
else
{
printf("\nStack is full!");
}
}
void pop(stack *st)
{
if(st->top != -1)
{
st->top--;
}
else
{
printf("\nStack is empty!");
}
}
void printList(stack *st)
{
int i;
for(i = 0; i < st->top + 1; i++)
{
printf("%d -> ", st->items[i]);
}
puts("");
}
int main(void)
{
stack stack1;
stack1.top = -1;
stack stack2;
stack2.top = -1;
push(3, &stack1);
push(5, &stack1);
push(7, &stack1);
printList(&stack1);
pop(&stack1);
printList(&stack1);
pop(&stack1);
printList(&stack1);
}