Исключение нарушения прав доступа - PullRequest
0 голосов
/ 10 октября 2018

Я делаю эту программу, где вы должны использовать оператор switch в main для изменения стека, и у меня возникла небольшая проблема с оператором push.После того, как я ввел значение для помещения в стек, программа делает паузу и показывает эту ошибку: Exception thrown: write access violation. **this** was 0x1AD0112. occurred Ошибка указывает на мой файл cpp для методов в push ().

#include "Stack.h"

void Stack::push(int val) {
    top = top + 1;
    ary[top] = val;          //this is where the exception is thrown.
    //ary[top++] = val;
}

int Stack::pop() {
    top = top - 1;
    return ary[top + 1];
    //return ary[top--];
}

    int Stack::peek() const {
        return ary[top];
    }

    bool Stack::isFull() const {
        if (top == SIZE - 1)
            return true;
        else
            return false;
        //return top == SIZE - 1;
    }

    bool Stack::isEmpty() const {
        if (top == -1)
            return true;
        else
            return false;
        //return top == -1;
    }

    Stack::Stack() {
        top = -1;
    }

И затем я вызываюметод в главном, чтобы поместить значение на вершину стека.

#include "Stack.h"
#include <iostream>
using namespace std;

int main() {
    Stack s;
    int x;
    int y;
    char c;

    cin >> c;

    do {

        switch (c) {
        case 'P':           //push statement
            cin >> x;
            s.push(x);
            break;

        //case 'O':
            //y = s.pop();
            //cout << y << endl;
            //break;

        case 'K':
            y = s.peek();
            cout << y << endl;
            break;

        case 'Q':
            return 0;
            break;

        }

    } while (c != 'Q');
    return 0;
}

Здесь также находится заголовочный файл

#ifndef STACK_H
#define STACK_H

class Stack {
    private:
        int top;
        static const int SIZE = 10;
        int ary[SIZE];

    public:
        int pop();
        void push(int);
        int peek() const;
        bool isEmpty() const;
        bool isFull() const;
        Stack();

};

#endif

Ошибка возникает после ввода первого нажатиязначение.Любая помощь приветствуется!Спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Поскольку единственное место, где вы можете изменить значение 'c', которое используется в операторе switch switch, - это перед циклом "do while", вы попадаете в цикл, застрявший с выбранным вами выбором.В случае, если вы выбрали 'P', все значения, которые вы вводите позже, - это те, которые вы хотите поместить в стек (потому что вы застряли с c = 'P'). Переместите строку cin >> c внутри части 'do' передоператор 'switch'.Это заставит программу вести себя так, как вы запланировали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...