[英]C++ array[size] greater than 65535 throwing inconsistent overflow
构建大小为 [x>65535] 的结构数组会引发0xC00000FD error
,即使 x 被声明为int64_t
,但不一致。 将在一行中正常工作,而不是在下一行。
int64_t length;
length = (pull from other code);
Foo foo[length];
//^ this works
Foo2 foo2[length];
//^ this one doesn't
这是数组构造的问题吗? C++ 最大? 编译器/内存限制?
VLA(可变长度数组)不在标准 C++ 中。 这意味着以下内容是非法的(即使它有效):
int length;
cin >> length;
int array[length];
什么是0xC00000FD
错误代码? 这意味着堆栈溢出异常。 这意味着您超出了操作系统设置的堆栈限制。 由于您在 windows 上,因此默认情况下您的堆栈限制为1 MB 。
使用堆。
int* myArray = new int[length];
//or even better
std::vector<int> myArray;
myArray.reserve(length);
您将破坏堆栈,因为您只有一个小堆栈(我认为默认值约为 1MB)并且 VLA arrays 分配在堆栈上。 (65535*sizeof(int)==~256kb) 256 kb 不是整个堆栈,但是如果分配另一个,则为 512kb。 这大约是堆栈的一半。 添加调用帧和其他本地变量,您将很快通过大小 ==> Stackoverflow
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.