Привет, народ.
Вот написал простейший стэк, но есть один баг :
при декрементировании указателя все работает OK, но если этого не сделать, то после вызова pop()
первый элемент выводится ноль, а дальше — вывод стэка сдвинут.
Я начинающий, но хочу во всем разобраться по-человечески....
Заранее благодарю!
Вот мой код (баг с указателем прокомментирован):
Возможно, есть другие ошибки... прошу прокомментировать

)
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
#define ARRSIZE 6
int *sp = NULL;
int tos = 5;
int array[5] = {1,2,3,4,5};
void push(int *array);
void pop();
int main()
{
sp = array;
for(int i = 0; i < 5; i++)
push( &array[i] );
pop();
getch();
return 1;
}
void push( int arr[] )
{
if( (*sp) == ARRSIZE )
{
cout << "Stack overflow" << "\n";
getch();
exit(0);
}
sp = arr;
cout << (*sp);
sp++;
++tos;
}
void pop()
{
--sp; // БАГ!!!!!!!!если убрать эту инструкцию, то все сдвигается на 1элемент == 0 !!!!!!
cout << "\n";
for(int i = 0; i < 5; i++ )
if (*sp == tos )
{
cout << "Stack is empty!";
getch();
exit(0);
}
else
{
cout << *sp;
--sp;
}
}
Добавлено форматирование, удалён хвост из пустых строк. — Кодт