大于65535的C++数组[size]引发不一致的溢出
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阵列。(65535*sizeof(int(==~256kb(256kb不是整个堆栈,但如果您分配另一个堆栈,则为512kb。这大约是堆栈的一半。添加调用帧和其他本地帧,您将很快通过大小===>堆栈溢出
相关文章:
- 'short int'持有的值溢出,但"自动"不会溢出?
- 大于65535的C++数组[size]引发不一致的溢出
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- CreateDIBSection为同一图像返回不一致的位图位值
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 这种比较是否不一致(或者存在其他问题)?
- 以下可变参数模板行为是否不一致?
- 如何修复我的链表读数不一致的问题?
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- void 函数中的指针参数返回不一致的值
- 如何查找导致结果不一致的代码
- 跨平台 mySQL 与字符集不一致
- C++:不一致的 std::p ow( 类型 ) 定义