我想要一个程序中的大型数组。
我的代码有一个包含3个浮点类型变量的结构,我想要一个这个结构的大尺寸三维数组 我的代码给出了小型数组的输出,但是当我增加数组的大小时,我得到一个堆栈溢出异常/错误。
请帮忙。
答案 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)
答案 3 :(得分:0)
我不知道您是否需要,但如果需要,您可以使用链接器选项更改默认堆栈大小,例如在Visual Studio中,转到“属性 - 配置属性 - 链接器 - 系统 - 堆栈保留大小”。