C++ C+中结构的构造函数+;导致非零退出代码
当我在下面的代码中调用SegTree结构的构造函数时,我总是得到一个非零的退出代码。当我注释掉初始化结构的行时,程序运行时没有问题。有人能解释为什么会发生这种情况以及如何修复我的代码吗C++ C+中结构的构造函数+;导致非零退出代码,c++,struct,exit-code,C++,Struct,Exit Code,当我在下面的代码中调用SegTree结构的构造函数时,我总是得到一个非零的退出代码。当我注释掉初始化结构的行时,程序运行时没有问题。有人能解释为什么会发生这种情况以及如何修复我的代码吗 #include <iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm> #include <string> #include <vector> #incl
#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构分段树{
int N;
长长的树[1哇,那是一个很大的结构:
struct SegTree{
int N;
long long tree [1<<20], arr [1<<20];
(使用向量后,可能比在构造函数中以某个最大大小一次性分配内存要好得多).< /P> >代码> STDIO .H/<代码> >代码> STDLI.H./>和 String .H./C>是C标准库,不是C++标准库。C++标准库头永远没有后缀“代码> .H/CODE”。也可以用现代C++方式初始化类成员。你认为代码“多长”?长长树[1码]长长树?[1] Tabre的复制品:我的C++标准的副本指定了<>代码> STDIO .H/COD>等,与代码> CSTDIO >有什么关系。它们在什么意义上是“不是C++标准库”?(请注意,在实践中,cstdio
始终将名称放在全局名称空间中,std::
,这现在是标准允许的。)正如我在前面的一条评论中所说,数组的大小不是问题所在。我能够在没有结构的情况下成功运行代码。@YouKnowMe:您使用的是哪种编译器?如果gcc看到long-long-array[1其中一种可以工作,我不会感到惊讶。:)然而,我仍然不明白为什么我能够在结构之外分配如此大的数组大小…@YouKnowMe-如果你直接将数组放入main,编译器可以将数组优化到数据段中。这两种情况不需要进行比较。啊,我明白了。我只需要将代码更改为使用向量。
std::vector<long long> tree = {1<<20};
std::vector<long long> arr = {1<<20};