为什么在这种情况下会出现 "segmentation fault"

Why does "segmentation fault" occur in this case

在这种情况下发生“分段错误”

#define MAX_NODE 200001
#define MAX_DP 19

using namespace std;

int main()
{
    int next[MAX_NODE][MAX_DP];
    return 0;
}

但是,这种情况不会发生

#define MAX_NODE 200001
#define MAX_DP 19

using namespace std;

int main()
{
    int **next = (int **)malloc(MAX_NODE * sizeof(int *));
    for (int i = 0; i < MAX_NODE; i++)
    {
        next[i] = (int *)malloc(MAX_DP * sizeof(int));
    }
    return 0;
}

是什么造成了这种情况?

g++ 版本: Apple clang 版本 12.0.0 (clang-1200.0.32.29) 目标:x86_64-apple-darwin20.3.0 线程模型:posix

您的堆栈溢出了。堆栈space是有限的,这就是为什么大对象应该分配在堆上(new)。

int next[MAX_NODE][MAX_DP]; 创建超过 10 MB 的堆栈分配,这肯定大于平均堆栈大小。