我正在尝试使用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。
您找不到这样的堆栈大小:
int n_maxim = sizeof(stackArray) / sizeof(int);
因为这只是sizeof
指针除以sizeof
和int
,所以很可能是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;
}
...