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

vam*_*dur 0 c++ struct exit-code

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

请帮助,并提前感谢!

编辑:我的问题不是数组的大小,正如我在评论中提到的那样.我可以创建数组并在将它们放在结构外部时运行代码.

Mar*_*ica 7

哇.这是一个很大的结构:

struct SegTree{
    int N;
    long long tree [1<<20], arr [1<<20];
Run Code Online (Sandbox Code Playgroud)

1<<20是1兆. long long通常是8个字节,所以你的结构是16 MB ...并且你在堆栈上分配它.通常,程序为堆栈分配1Mbyte ...因此它不适合!

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

    std::vector<long long> tree = {1<<20};
    std::vector<long long> arr  = {1<<20};
Run Code Online (Sandbox Code Playgroud)

(一旦你使用向量,你可能比在构造函数中以一些最大大小一次分配内存更好).