我現在正在用VC++工作幾個月。直到今天,我從來沒有遇到過「堆棧溢出」錯誤,當我嘗試傳遞一個結構的功能。堆棧溢出錯誤:將struct傳遞給函數vC++
這是我的代碼:
int bReadFileData(string sFile, struct FILE_DATA *File_Data);
const int MAX_CRASH_FILE_SIZE = 100000;
struct FILE_DATA
{
int SIZE;
int GOOD[MAX_CRASH_FILE_SIZE];
int BAD[MAX_CRASH_FILE_SIZE];
};
int bReadFileData(string sFile, struct FILE_DATA *File_Data)
{
File_Data->SIZE = 0;
if(PathFileExists(Convert.StringToCstring(sFile)) == 1)
{
string sLine = "";
int iLine = 0;
std::ifstream File(sFile);
while(getline(File, sLine))
{
if(sLine.find(":") != std::string::npos)
{
File_Data->CRASH_VALUES[iLine] = sLine.substr(0, sLine.find(":"));
File_Data->CRASH_VALUES[iLine] = sLine.substr(sLine.find(":") + 1, sLine.length());
}
else
{
File_Data->CRASH_VALUES[iLine] = (sLine);
}
iLine++;
}
File_Data->SIZE = iLine;
}
return 1;
}
`
從我打電話的方法如下主要功能。
void ReadFiles()
{
FILE_DATA Files[3];
bReadFileData("C:\\Test1.txt", &Files[0]);
bReadFileData("C:\\Test2.txt", &Files[1]);
bReadFileData("C:\\Test3.txt", &Files[2]);
}
這段代碼有什麼不對嗎?爲什麼堆棧溢出錯誤被拋出(只要它進入ReadFiles()?
你的結構體大小爲800K。其中三個需要2M +。默認的堆棧大小是1M - 'FILE_DATA [3]'不可能適合它。避免將大的變量放在堆棧上,而是將它們分配到堆上。我也質疑定義這樣一個大結構的智慧,考慮使用類型'std :: vector'或類似的成員來代替巨大的固定大小的數組。 –