gpt4 book ai didi

c++ - 不知道为什么我会出现堆栈溢出

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:27 25 4
gpt4 key购买 nike

我不明白为什么我一进入主函数就立即出现堆栈溢出。我应该从文本文件中读取并进行一些处理。有人可以向我解释原因并建议如何解决吗?

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <iomanip>

using namespace std;
const int MAX=100;
enum countrytype{S,F};

struct dob
{
int day;
int month;
int year;
};

struct Local
{
char country[MAX];
char gender[MAX];
char name[MAX];
dob birthday;
int noofmod;
char mod[MAX][MAX];
int mark[MAX];

};

struct Foreign
{
char country[MAX];
char gender[MAX];
char name[MAX];
dob birthday;
int noofmod;
char mod[MAX][MAX];
int mark[MAX];

};

union Student
{
Local localstudent;
Foreign foreignstudent;

};

struct UOWstudent
{
countrytype ct;
Student st;

};

void readfile(ifstream &read,UOWstudent noofstudent[MAX]);

int main()
{
UOWstudent noofstudent[MAX];
ifstream read;

readfile(read,noofstudent);
cout<<endl
<<noofstudent[0].st.foreignstudent.country
<<endl
<<noofstudent[0].st.foreignstudent.gender
<<endl
<<noofstudent[0].st.foreignstudent.name;



system("PAUSE");

}

void readfile(ifstream &read, UOWstudent noofstudent[MAX])
{
int i=0;
char country;
char filename[MAX];
cin>>filename;
read.open(filename);




read>>country;
/*if (country =='F')
{
read.getline(noofstudent[i].st.foreignstudent.country,MAX);

read>>noofstudent[i].st.foreignstudent.gender;
read.getline(noofstudent[i].st.foreignstudent.name,MAX);

}

else
read.getline(noofstudent[i].st.foreignstudent.country,MAX);*/




}

这是我的文本文件

F South Korea
Male Psy Park Jae Sang
31 - 12 -1977
3 CSCI114 55 CSCI103 44 GangNam

最佳答案

简单地说,您的代码在堆栈上分配其所有存储空间,而您分配的空间超出了允许的限制。

查看超出限制的原因可能更有用。

main() 的第一行是在堆栈上分配一个包含 100 (MAX = 100) 个学生的数组:

UOWstudent noofstudent[MAX];

UOWstudent 有多大?您可以通过查看每个字段来弄清楚:

struct UOWstudent
{
countrytype ct; // enum. let's assume 4 bytes. (32-bit executable)
Student st; // ???
};

一个学生有多大?

union Student
{
Local localstudent;
Foreign foreignstudent;
};

它是本地人或外国人的大小,所以我们只看一个。我们需要对 char 的大小做另一个假设。假设 1 字节(8 位字符):

struct Local
{
char country[MAX]; // 100 bytes
char gender[MAX]; // 100 bytes
char name[MAX]; // 100 bytes
dob birthday; // 3 ints or 12 bytes (32-bit assumption again)
int noofmod; // 4 bytes
char mod[MAX][MAX]; // 10,000 bytes
int mark[MAX]; // 400 bytes
}; // total: 10,716 bytes

所以 main() 的第一行尝试在堆栈上分配 (10,716 + 4) x 100 = 1,072,000 字节。我对您的编译器设置的 char 和 int 大小做了最保守的假设,它们很可能更高。如果堆栈限制确实是 1 兆字节(1,048,576 字节),则此初始分配超出限制。

You can use C's sizeof operator to get information about the actual size of your types. Refer to this stackoverflow answer, discussing allocating arrays on the heap, instead of the stack, which is a good step towards solving your problem.(UOWstudent == 滑铁卢大学学生?)

关于c++ - 不知道为什么我会出现堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com