我有一个小程序,用C++编写,包含一个大型数组的类。这个类看起来像这样:为什么我的程序在构造函数中使用fread时崩溃?
class Test
{
public:
Test();
...
private:
int myarray[45000000];
};
现在,这个数组从文件读入。我想直接与构造函数做到这一点,而不是打扰任何额外的功能。该数组只需要一次读入,之后不会再改变。它具有指定的确切大小。
我的构造是这样的:
Test()
{
memset(myarray, 0, sizeof(myarray));
FILE* fstr = fopen("myfile.dat", "rb");
size_t success= fread(myarray, sizeof(myarray), 1, fstr);
fclose(fstr);
}
使用Visual Studio 2012旗舰版:当试图启动一个使用这个类的程序,它与“APPCRASH”崩溃只要创建类,和当试图对其进行调试时(我几乎不知道),告诉我该错误是堆栈溢出。
这一切的奥秘在于,在我以前的版本中,myarray是一个静态变量,我不得不调用静态函数来设置它,一切都很顺利。但试图将其转换为构造函数,尽我所能,我所有的尝试都失败了。
那么我在这里做错了什么?
您的课程对于堆栈太大了。尝试在堆中分配数组,而不是在堆栈中分配数组。 – Nick 2013-02-28 13:40:57