创建大数组时出现“细分错误:11”

时间:2018-10-14 17:31:11

标签: c++ c++11

我正在尝试使用数组创建堆栈的实现,并且遇到分段错误的问题。下面是我的代码。

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传递给构造函数,但不知道如何使用该值创建一个数组。感谢您的帮助。

0 个答案:

没有答案