C ++中类成员的动态分配

问题描述 投票:0回答:1

我正在尝试使用C ++学习POO。我在小节中有关于内存分配的问题。我想创建一个堆栈类。我有用C ++编写的代码:

这是堆栈类:

class Stack {
    private:
        int *stackArray;
        int topLevel;

    public:
        // Constructor without par
        Stack() {
            stackArray = new int[NMAX];
            topLevel = -1; // stiva este NULL la inceput
        }

        Stack(int array_size) {
            stackArray = new int[array_size];
            topLevel = - 1;
        }

        ~Stack() {
            delete[] stackArray;
        }

        void push(int x) {
            int n_maxim = sizeof(stackArray) / sizeof(int);

            if (topLevel >= n_maxim - 1) {
                cout << "The stack is full !\n";
                return;
            }
            topLevel++;
            stackArray[topLevel] = x;
        }
};

这是主要功能:

int main() {
    int n;
    cout << "Introduceti numarul de elemente =";
    cin >> n;
    Stack *s = new Stack();
    s->push(6);
    s->push(10);
    return 0;
}

所以我的问题是内存分配无法正常工作,它不会使大小为NMAX(100)或大小为n的'v'数组从键盘读取。因此push函数仅适用于1个元素,因为我不知道为什么,任何该分配内存之后的sizeof(v)为4。

c++ class dynamic-memory-allocation
1个回答
0
投票

您找不到这样的堆栈大小:

int n_maxim = sizeof(stackArray) / sizeof(int);

因为这只是sizeof指针除以sizeofint,所以很可能是1

您想要类似的东西:

class Stack {
private:
        int *stackArray;
        int topLevel;
        int n_maxim;

public:
        // Constructor without par
        Stack() {
            stackArray = new int[NMAX];
            topLevel = -1; // stiva este NULL la inceput
            n_maxim = NMAX;
        }

       Stack(int array_size) {
            stackArray = new int[array_size];
            topLevel = - 1;
            n_maxim = array_size;
        }
        ...
© www.soinside.com 2019 - 2024. All rights reserved.