почему выталкивание из моего стека возвращает мусор вместо исходных переменных? - PullRequest
0 голосов
/ 27 сентября 2018

Когда я запускаю свою программу, она отлично помещает числа в массив.Но когда он их выталкивает, а затем печатает, я получаю номера мусора.Проблема связана с моей основной функцией?Или я неправильно инициализировал свой массив в классе Stack?Сначала у меня были некоторые проблемы с конструктором, но после некоторых корректировок он работал нормально.

Есть ли что-то, что выделяется из-за того, почему я получаю номера мусора после запуска моего скрипта?

Спасибо

#include<iostream>
#include<cstdlib>
#ifndef MYSTACK_H
#define MYSTACK_H

#include<iostream>
#include<new>
using namespace std;


class MyStack
{
private:
    int *list;
    int top;
    int max;
public:
    MyStack(int m)
    {
        int max = m;
        list = new int[max];
        int top = -1;
    }
    ~MyStack()
    {
        delete[] list;
    }
    int push(int);
    int pop();
    int peek(int &a) const;
};

int MyStack::push(int a)
{
    if (top < max - 1)
    {
        top = top + 1;
        list[top] = a;
        return 0;
    }
    return -1;
}

int MyStack::pop()
{
    if (top > -1)
    {
        top = top - 1;
        return 0;
    }
    return -1;
}

int MyStack::peek(int &a) const
{
    if (top > -1)
    {
        return(list[top]);
        return 0;
    }
    return -1;
}

#endif

int main()
{
    MyStack m(5);
    for (int i = 0; i < 6; i++)
    {
        int x = 1 + rand() % 100;
        cout << x << "\t";
        m.push(x);
    }
    cout << "\n";
    for (int i = 0; i < 6; i++)
    {
        int x;
        m.peek(x);
        cout << x << "\t";
        m.pop();
    }
    cout << "\n";
    system("pause>nul");
}

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

top и max не устанавливаются после вызова конструктора MyStack, вы создаете локальную переменную, и члены не затрагиваются:

int max = m; // local 
list = new int[max];
int top = -1; // local

изменяется на

max = m;
list = new int[max];
top = -1;
0 голосов
/ 27 сентября 2018

Параметр a никогда не используется в вашей функции peek():

int MyStack::peek(int &a) const
{
    if (top > -1)
    {
        return(list[top]); // you return the value instead of assigning it to "a"
        return 0; // unreachable by the way
    }
    return -1;
}
...