реализация стека через указатели

286
23 января 2018, 12:17

При вводе 0 выводится не число на вершине стека, а какой-то мусор. В чём проблема?

#include <iostream>
#define size 50
using namespace std;
void push(int i);
int pop();
int *tos, *p1, stack[size];
int main()
{
    setlocale(LC_ALL, "rus");
    int value;
    tos = stack;
    p1 = stack;
    do
    {
        cout << "Vvedite chislo:";
        cin >> value;
        if (value != 0) push(value);
        else cout << "Chislo na vershine steka ravno " << pop() << endl;
    } while (value != -1);
    system("pause");
    return 0;
}
void push(int i)
{
    p1++;
    if (p1 == (tos + size))
    {
        cout << "Stek perepolnen" << endl;
        exit(1);
    }
    *p1 = i;
}
int pop()
{
    if (p1 == tos)
    {
        cout << "Stek ischerpan" << endl;
        exit(1);
    }
    p1--;
    return *p1;
}
Answer 1

pop() не возвращает никакого значения (хотя должен возвращать int), приводя к неопределённому поведению.

READ ALSO
Работа с нативным кодом из .Net Core

Работа с нативным кодом из .Net Core

У Microsoft есть статья, посвященная работе с нативным кодов вNet Core на различных платформах

251
Почему вылетает программа после ввода name

Почему вылетает программа после ввода name

Друзья,вылетает программа после ввода поля tabl[i]name; Не могу понять в чём проблема

212
Java, почему не работает код, буфер обмена

Java, почему не работает код, буфер обмена

Помогите, пожалуйста, исправить код моей первой программыОна должна анализировать буфер обмена на наличие в нём 5-ти значного числа начинающегося...

318
Создание AutoCompleteTextView внутри кастомного Menu

Создание AutoCompleteTextView внутри кастомного Menu

Как создать AutoCompleteTextView внутри кастомного меню?

213