【发布时间】:2013-09-26 05:30:37
【问题描述】:
我正在尝试生成struct 的二维数组,但这会导致程序无法启动。窗口冻结,程序在几秒钟后退出。知道为什么吗?
这是我尝试定义数组 cells 的文件。
#ifndef _FIELD_H_
#define _FIELD_H_
class Field {
public:
static const int minX = -400;
static const int maxX = 400;
static const int minY = 0;
static const int maxY = 400;
Field();
private:
struct absCell {
int material;
float health;
} cells[maxX - minX + 1][maxY - minY + 1];
};
#endif
删除这四行后,程序就可以运行了:
struct absCell {
int material;
float health;
} cells[maxX - minX + 1][maxY - minY + 1];
知道这是怎么发生的吗?任何帮助表示赞赏!
更新
好的,显然问题是这个数组变得相当大。也许你可以帮我优化一下。
Material 必须是介于 0 和 10 之间的整数。 Health 必须是介于 0 和 1 之间的浮点数,最多包含 2 个小数位。
如何限制这些变量的大小?
更新 2
Mark B 建议使用vectors,而 itwasntpete 建议使用指针、new 和 delete。区别在哪里,这两种方法的优缺点是什么?再次感谢!
【问题讨论】:
-
这本身并没有错。问题可能出在其他地方,当您进行更改时它恰好出现。尝试创建一个SSCCE的问题:sscce.org
-
我要去除尘我的老化和有点雾的水晶球在
main()中建议你有类似Field fld;的东西(更糟糕的是,@987654330 的 array @. 如果是这样,请注意此结构定义了一个固定的堆栈绑定数组,该数组包含大约 800x400 个成员,或 320000 个int和float值。假设每个是 4 个字节,那就是 256000 个字节,或大约 2.44 MB 每个 Field 对象 的堆栈空间。简而言之,我认为您很可能会耗尽您的堆栈。请告诉我们您在哪里使用 @ 987654333@,特别是Field类型变量的定义位置和方式。 -
我估计您的班级对于每个实例将需要大约 2.5 Gb 的内存。这不是一个不可能的大数目,但它是相当多的。您是否尝试过减小数组的大小?
-
stackoverflow 的好例子。
-
@LarsEbert 对 update2 的回答,向量更容易,指针对于新手来说非常困难,任何阅读本论坛的内容都会告诉你。