为什么本地数组出现分段错误

Why am I getting a Segmentation fault for local array?

本文关键字:分段 错误 数组 为什么      更新时间:2023-10-16

我有一个程序,它将数据存储在本地数组中,并可以调用mergesort或bubblesort以升序对该数组的内容进行排序。该程序对于大约10个项目的输入工作良好,但当我试图在一个非常大的数据集上运行该程序时,我会立即收到seg错误。如果我使用动态数组,没有问题,但对于这个项目,我必须使用本地数组。我已经尝试将"ulimit-s"设置为明显高于所需内存空间的值,但我仍然遇到seg错误。如何在仍然使用本地数组的情况下避免分段错误。我已附上我的代码。

seg错误发生在代码的这一部分,其中包含数组声明。

#include <iostream>
#include <fstream>
using namespace std;
int MaxSize = 2100000;
int main(){
    ifstream infile; //use provided class to create stream object for reading
    ofstream outfile; //use provided class to create stream object for writing
    //long int *p = new long [MaxSize];
    long int array[MaxSize]; //declare array
    double begin_time, end_time, cpu_time_used;
    infile.open("lab5_input.txt");
    if (infile.is_open()) //checks if file is really open
    {
        cout << "File successfully opened" << endl;
    }
    else
    {
        cout << "Error opening file";
    }
    int option;
} //declare variable

问题可能是数组大小。你不能有一个2100000大小的数组。试着缩小数组。我在GCC和MSVC上尝试过,但两个程序都崩溃了,直到我减小了数组大小。正如@MatsPetersson所说,数组的一个更好的替代方案是C++的向量,除非你不能使用STL。