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};
(一旦你使用向量,你可能会比在构造函数中以某个最大大小一次分配内存做得更好)。
当我在下面的代码中调用我的 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};
(一旦你使用向量,你可能会比在构造函数中以某个最大大小一次分配内存做得更好)。