1

我想要一个程序中的大数组。

我的代码有一个包含 3 个浮点类型变量的结构,我想要一个这种结构的大尺寸 3 维数组。
我的代码给出了小型数组的输出,但是当我增加数组的大小时,我得到一个堆栈溢出异常/错误。

请帮忙。

4

4 回答 4

3

代替

int main() {
   float array[N][N][N][N][N];
   ...

float array[N][N][N][N][N];

int main() {
   ...

或者,写:

int main() {
   static float array[N][N][N][N][N];
   ...

顺便说一句:我在 VC10/Win32 中的默认设置允许堆栈分配高达N=12,这意味着 ~ 990KB。

问候

rbo

于 2012-06-13T17:22:52.043 回答
2

这里的解决方案是std::vector. 它在堆上分配内存,这比堆栈大得多,并且可以完全不费力地改变它的大小。

typedef std::vector<float> vec;
typedef std::vector<vec> vec2D;
typedef std::vector<vec2D> vec3D;
typedef std::vector<vec3D> vec4D;
typedef std::vector<vec4D> vec5D;

vec5D d (15, vec4D (15, vec3D (15, vec2D (15, vec (15)))));
//use as you would a normal array for the most part

当然,拥有一个 5D 数组(如评论中提到的“需要”)并不是您特别想要的。我建议您创建一个Matrix具有底层一维向量的类别。

更好的是,重新考虑您的设计。很少有时候您确实需要像这样的高度多维数组。

于 2012-06-13T17:32:43.343 回答
1

除了在堆上分配它之外,您还可以尝试使用/F/STACK选项或在项目属性中保留更大的堆栈:

在此处输入图像描述

于 2012-06-13T17:21:52.067 回答
0

我不知道您是否需要,但如果您愿意,您可以使用链接器选项更改默认堆栈大小,例如在 Visual Studio 中转到“属性 - 配置属性 - 链接器 - 系统 - 堆栈保留大小”。

于 2012-06-13T17:20:20.563 回答