我一直在使用SDL库开发一个程序。一切都在Linux中完成并且运行良好,移植到Windows时会出现问题。当我构建并运行程序崩溃(程序停止工作)并关闭时,我首先认为它与SDL有关,但我将错误隔离到一行,其中我只定义了二维数组或类的对象。类prototipe在头文件中定义,如下所示:
#ifndef PARTICULA_H
#define PARTICULA_H
class particula {
public:
particula();
particula(const particula& orig);
virtual ~particula();
int x,y;
int vx,vy;
int tipo;
int tipo2;
int peso;
int empuje;
bool update;
bool update_temp;
int contador;
int temperatura;
};
#endif
现在,在.cpp文件中定义的类构造函数
particula::particula() {
vx = 0; vy = 0; tipo = 0; peso = 0; empuje = 0;
update = true; contador = 0; temperatura = 0;
update_temp = true; tipo2 = 0;
}
particula::particula(const particula& orig) {
}
particula::~particula() {
}
好的,在main()函数中,刚开始时,我定义了这个类的数组:
particula matriz[400][220];
如果我构建并运行,程序崩溃,如果我评论该行,程序不会崩溃。它不能是其他任何东西,我已经评论了整个main
函数来找到它,因此该行是唯一执行的东西。
会是什么呢?我做错了吗?
答案 0 :(得分:2)
我认为你在堆栈上分配这么大的数组,所以你会崩溃。你在main函数中写了这行,我没有看到new运算符。所以你在堆栈上为你的结构分配内存。 Stack无法容纳如此多的数据...使用new关键字在堆中分配memomy并且不要忘记稍后释放它。 Read this article.
答案 1 :(得分:0)
默认情况下,Windows上的最大堆栈空间量为1mb,但该阵列大约需要4mb。所以你必须在堆上分配它:
particula (*matriz)[220] = new[400][220];
或者:
vector<vector<particula>> matriz;
然后根据需要添加元素。