Я получаю ошибку повреждения кучи при попытке изменить размер массива стека - PullRequest
0 голосов
/ 11 октября 2019
#include<iostream>

#include<string>


class stack {

    char* stk;

    int maxSize = 1;

    int top;

public:

    stack() {
        stk = new char[maxSize];
        top = 0;

    }

    bool isEmpty() {
        return (top == 0 ? 1 : 0);
    }

    bool isFull() {
        return (top > maxSize ? 1 : 0);
    }

    void push(char val) {
        if (!isFull()) {
            stk[top] = val;
            top++;
        }
        else {
            extend();
            stk[top] = val;
            top++;

        }
    }

    void pop() {
        if (!isEmpty()) {
            top--;
        }
        else {
            std::cout << "\nCannot pop an empty stack. \n";
        }
    }

    void display() {
        if (!isEmpty()) {
            for (int i = 0; i < top; i++) {
                std::cout << std::endl << stk[i];
            }
        }
        else {
            std::cout << "\nCannot display an empty stack. \n";
        }
    }

    char getTop() {
        if (!isEmpty())
            return stk[top];
        else
            std::cout << "\nCannot get anything from an empty stack. \n";
    }

    void extend() {
        char* tmp;
        tmp = new char[maxSize];
        for (int i = 0; i < maxSize; i++) {
            tmp[i] = stk[i];
        }
        delete [] stk;
        maxSize = maxSize + 1;
        for (int i = 0; i < maxSize - 1; i++) {
            stk[i] = tmp[i];
        }
        delete [] tmp;
        tmp = NULL;
    }
};

void main() {

    stack s;

    s.push('c');

    s.pop();

    s.push('S');
    s.push('T');
    s.push('R');
    s.push('I');
    s.push('N');
    s.push('G');

    s.display();

    system("pause");
}

Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю не так? Это базовая программа, которая не должна показывать такую ​​проблему. Я не хочу использовать много функций и ничего голого кода. Я новичок, как код может показать. Просто говорить что-то, чтобы я мог публиковать сообщения на форуме, не позволил бы мне писать, если я не напишу намного больше. Поэтому я просто пытаюсь выразить словами, чтобы я мог писать спокойно.

...