需要大尺寸静态数组

时间:2012-06-13 17:15:21

标签: c++ visual-c++ multidimensional-array stack

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

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

请帮忙。

4 个答案:

答案 0 :(得分: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];
   ...

BTW:我在VC10 / Win32中的默认设置允许堆栈分配最多N=12,这意味着~990KB。

问候

RBO

答案 1 :(得分:2)

这里的make-for解决方案是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类,其中包含一个基础1D向量。

更好的是,重新考虑你的设计。很少有时候你确实需要一个高度多维的数组,比如那个。

答案 2 :(得分:1)

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

enter image description here

答案 3 :(得分:0)

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