我正在尝试使用数组创建堆栈的实现,并且遇到分段错误的问题。下面是我的代码。
Stack.hpp
#ifndef STACK_H
#define STACK_H
#include <iostream>
#define MAX_ARRAY_SIZE 2000000
using namespace std;
class Stack {
int head; //
public:
Stack() {
head = 0;
}
int a[MAX_ARRAY_SIZE]; // Maximum size of Stack
void push(int x); // Add x
int pop(); // Remove one element
int& top(); // Return reference to the top element
int size(); // Return number of elements
bool empty(); // Return 0 if the stack is empty
};
void Stack::push(int x) {
if (head == MAX_ARRAY_SIZE) {
cout << "Stack Overflow" << endl;
}
else {
a[head++] = x;
cout << "Added " << x << endl;
}
}
int Stack::pop() {
return a[--head];
}
int& Stack::top() {
return a[head - 1];
}
int Stack::size() {
return head;
}
bool Stack::empty() {
if (head == 0) return true;
else return false;
}
#endif // STACK_H
Main.cxx
#include <iostream>
#include <vector>
#include <string>
#include "Stack.hpp"
int main() {
int value;
Stack s;
std::string x;
std::vector<string> v;
while (std::cin >> x) {
v.push_back(x);
if (v.back() == "A") {
std::cin >> value;
s.push(value);
}
else if (v.back() == "D") {
if (s.empty() == 1) {
cout << "The stack is empty" << endl;
}
else {
cout << "Deleted " << s.pop() << endl;
}
}
else if (v.back() == "S") {
cout << "Size of the stack: " << s.size() << endl;
}
else if (v.back() == "F") {
std::cin >> value;
}
}
}
我能够将数组的最大大小缩小到2000000到3000000之间。如果我插入的值太大,则在运行编译程序时会出现“ Segmentation fault:11”错误。有什么想法吗?
我还有第二个问题。我有一个简单的程序,可以为我的堆栈随机生成命令。该程序生成的第一个int决定命令的数量,因此不需要制作比该int大的数组。我知道如何将int传递给构造函数,但不知道如何使用该值创建一个数组。感谢您的帮助。