我想要一个程序中的大数组。
我的代码有一个包含 3 个浮点类型变量的结构,我想要一个这种结构的大尺寸 3 维数组。
我的代码给出了小型数组的输出,但是当我增加数组的大小时,我得到一个堆栈溢出异常/错误。
请帮忙。
我想要一个程序中的大数组。
我的代码有一个包含 3 个浮点类型变量的结构,我想要一个这种结构的大尺寸 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
这里的解决方案是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
具有底层一维向量的类别。
更好的是,重新考虑您的设计。很少有时候您确实需要像这样的高度多维数组。
我不知道您是否需要,但如果您愿意,您可以使用链接器选项更改默认堆栈大小,例如在 Visual Studio 中转到“属性 - 配置属性 - 链接器 - 系统 - 堆栈保留大小”。