繁体   English   中英

C++ array[size]大于65535抛出不一致溢出

[英]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++ 最大? 编译器/内存限制?

问题 1

VLA(可变长度数组)不在标准 C++ 中。 这意味着以下内容是非法的(即使它有效):

int length;
cin >> length;
int array[length];

问题 2

什么是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM