0

我一直在使用 SDL 库开发程序。一切都在 Linux 中完成并且运行良好,移植到 Windows 时出现问题。当我构建并运行程序崩溃(程序停止工作)并关闭时,我首先认为它与 SDL 有关,但我将错误隔离到我刚刚定义二维数组或类对象的行. 类原型在头文件中定义,如下所示:

#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函数来找到它,所以那行是唯一执行的东西。会是什么呢?我做错什么了吗?

4

2 回答 2

2

我认为你在堆栈上分配了这么大的数组,所以你会崩溃。你在 main 函数中写了这一行,我没有看到 new 运算符。所以你在堆栈上为你的结构分配内存。堆栈无法容纳这么多数据...使用 new 关键字在堆中分配内存,不要忘记稍后释放它。 阅读这篇文章。

于 2013-02-09T22:31:54.287 回答
0

默认情况下,Windows 上的最大堆栈空间量为 1mb,但该数组需要大约 4mb。所以你必须在堆上分配它:

particula (*matriz)[220] = new[400][220];

或者:

vector<vector<particula>> matriz;

然后根据需要添加元素。

于 2013-02-09T22:41:00.477 回答