0
我有一个if语句,只要我实现它,它会抛出一个“读取访问冲突”异常,即使我所有其他if语句看起来非常相似并且工作。其他的一切都很完美,所以它让我困惑,为什么会发生这种情况。C++:抛出异常:数组读取访问冲突
if (records[i].studentArray[j].id == records[i-1].studentArray[j].id) //these two
records[i].retained++;
全功能
void readFile()
{
//Function reads the file and displays all results
int i = 0;
int j = 0;
int count;
Semester records[25]; //only holds up to 25 semesters
Student studentArray;
string semesterName;
ifstream roster;
roster.open ("records.txt");
if (roster.is_open())
{
roster >> semesterName;
while(!roster.eof())
{
roster >> count;
records[i].semesterName = semesterName;
cout << semesterName;
records[i].numStudents = count;
records[i].studentArray = new Student[count];
for (j = 0; j < count; j++)
{
roster >> records[i].studentArray[j];
if (records[i].studentArray[j].year == "FY")
records[i].fycount++;
else if (records[i].studentArray[j].year == "SO")
records[i].socount++;
else if (records[i].studentArray[j].year == "JR")
records[i].jrcount++;
else if (records[i].studentArray[j].year == "SR")
records[i].srcount++;
if (records[i].studentArray[j].id == records[i-1].studentArray[j].id)
records[i].retained++;
}
cout << endl;
cout << "FY: " << records[i].fycount << endl;
cout << "SO: " << records[i].socount << endl;
cout << "JR: " << records[i].jrcount << endl;
cout << "SR: " << records[i].srcount << endl;
cout << "FY gain/loss: " << records[i].fycount - records[i - 1].fycount << endl;
cout << "SO gain/loss: " << records[i].socount - records[i - 1].socount << endl;
cout << "JR gain/loss: " << records[i].jrcount - records[i - 1].jrcount << endl;
cout << "SR gain/loss: " << records[i].srcount - records[i - 1].srcount << endl;
cout << "Percentage gained/lost: " << static_cast<double>(records[i].numStudents - records[i - 1].numStudents)/records[i - 1].numStudents * MULTIPLIER << "%" << endl;
cout << "Number of students retained: " << records[i].retained << endl;
cout << endl;
delete[] records[i].studentArray;
roster >> semesterName;
i++;
}
roster.close();
}
else
cout << "Error: File not found" << endl;
}
学生和学期班级在.h文件
struct Semester
{
string semesterName;
int numStudents;
int fycount = 0;
int socount = 0;
int jrcount = 0;
int srcount = 0;
int retained = 0;
Student *studentArray;
};
class Student
{
public:
string id;
string year;
string name;
string lastName;
friend istream & operator>> (istream &in, Student &s);
};
谢谢!
当i == 0时,您无法访问i-1元素 –
*** while(!roster.eof())*** https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside -a-循环条件 - 考虑错误 – drescherjm
只是在传递中,这里的错误消息是**操作系统“异常”**,而不是** C++“异常”**。尽管名称相同,但这两者无关。操作系统不会抛出异常。只有你的C++程序可以做到这一点,只有当它说'抛出'。 (好几年前,微软曾试图将操作系统异常与C++异常集成在一起,但他们似乎放弃了这种异常) –