我有一個小程序,用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