我现在正在用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'或类似的成员来代替巨大的固定大小的数组。 –