对象数组和崩溃
Array of objects and crash
我一直在使用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
函数来找到它,所以这一行是唯一执行的东西。可能是什么?我做错什么了吗?
我认为你在堆栈上分配了这么大的数组,所以你会崩溃。你在主函数中写了这行,我没有看到新的运算符。所以您为堆栈上的结构分配内存。堆栈无法容纳这么多数据。。。使用new关键字在堆中分配内存,以后不要忘记释放它。阅读这篇文章。
默认情况下,Windows上的最大堆栈空间为1mb,但该数组需要大约4mb。所以你必须在堆上分配它:
particula (*matriz)[220] = new[400][220];
或者:
vector<vector<particula>> matriz;
然后根据需要添加元素。
相关文章:
- 类对象数组的问题会导致崩溃
- 字节数组初始化会导致 DirectX 崩溃
- 使用 sf::Text 数组时崩溃
- For 循环在尝试读取数组 c++ 时程序崩溃
- 删除数组 c++ 崩溃问题
- 如果类的成员,C++数组会导致崩溃
- 在C++中删除指针数组时析构函数崩溃
- 在 C++ 中使用平展数组语法,崩溃取决于宽度/高度
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- C++ rezing 动态数组最多可以处理一定数量的元素,但在某些时候会崩溃并显示错误 (0XC0000005)
- 释放字符的动态数组时崩溃
- size_t结构非数组成员崩溃的强制转换
- C++程序在迭代到数组的最后一个元素时崩溃
- 从数组比较2个字符串时,程序崩溃
- C++ 尝试向类内的数组(或向量)添加值时程序崩溃
- 内存相关崩溃:Cocos2d游戏中的三维数组
- 尝试获取数组中的最小元素时崩溃
- 动态数组在构造函数处崩溃
- 使用数组的单向链表:它在运行时崩溃
- C 程序崩溃(数组和2个指针Binsearch功能)