Ваша основная проблема связана с преобразованием типа между указателем стека top
в размер стека size
.
top
- это int
, то есть со знаком тип.size_t
является целым типом без знака .
При тестировании (top >= (size - 1))
, top
преобразуется в unsigned int
и затем рассматривается как UINT_MAX
вместо -1
,который всегда> = для любого другого unsigned int
.
Вы можете использовать size_t
в качестве указателя стека, что означает, что вы не можете использовать отрицательное значение, или преобразовать (size - 1)
в значение со знаком допо сравнению с top
(но это последнее решение означает, что вы должны убедиться, что размер, указанный вами как size_t, не слишком велик для преобразования в целое число со знаком).
У вашей функции печати также есть две проблемы:
- в первом тесте вы назначаете
-1
на top
вместо сравнения значений - , вы изменяете указатель стека
top
, так что ваш стек находится внесовместимое состояние после звонка на print()