C++ 中结构的构造函数导致非零退出代码

Constructor of a Struct in C++ Causes Non-Zero Exit Code

当我在下面的代码中调用我的 SegTree 结构的构造函数时,我一直得到一个非零退出代码。当我注释掉初始化结构的行时,程序 运行s 没有问题。有人可以解释为什么会这样以及如何修复我的代码吗?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string>
#include <vector>
#include <string.h>

using namespace std;

struct SegTree{
    int N;
    long long tree [1<<20], arr [1<<20];
    SegTree(int x){ N = x; }
};

int main(){
    SegTree st(len);
    return 0;
}

请帮忙,提前致谢!

编辑:正如我在评论中提到的那样,我的问题不是数组的大小。当数组和 运行 代码被放置在结构之外时,我能够制作它们。

哇。这是一个结构:

struct SegTree{
    int N;
    long long tree [1<<20], arr [1<<20];

1<<20 是 1 兆。 long long 通常是 8 个字节,所以您的结构是 16 MB ...并且您在堆栈上分配它。通常,程序会为堆栈分配 1Mbyte ...所以它放不下!

解决方案是将数组更改为向量。然后数组将分配在堆上,你应该没问题:

    std::vector<long long> tree = {1<<20};
    std::vector<long long> arr  = {1<<20};

(一旦你使用向量,你可能会比在构造函数中以某个最大大小一次分配内存做得更好)。