我一直在我的代码上收到此错误。几分钟前,我的程序就完美地运行了,突然间,它一直向我抛出此错误。我试图通过在某些行之间使用cout << "here" << endl
来查找错误,有时该错误通常在for
函数内的readInName()
循环内停止。有时它将完全运行并打印出所有内容,甚至"here"
。其他时候我只会遇到相同的错误。
#include <fstream>
#include <string>
using namespace std;
// global variables
// these must be changed depending on the file.
const int SIZE = 10; // num of students
const int AMOUNTOFGRADES = 5; // num of tests per student
ifstream input;
// function declarations
void readInName();
float calculateAvgAndGrade(int count);
void header();
int readInGrades(int);
int main(){
header();
readInName();
return 0;
}
void readInName(){
string name[SIZE] = {""};
input.open("grade.txt");
int row,column;
int count;
for(row = 0; row < SIZE; row++){
input >> name[row];
cout << setw(10) << name[row] << ": ";
count = readInGrades(row);
cout << setw(5) << calculateAvgAndGrade(count) << endl;
}
input.close();
}
int readInGrades(int){
int r,c;
int grades[SIZE][AMOUNTOFGRADES] = {0};
int count = 0;
for(c = 0; c < AMOUNTOFGRADES; c++){
input >> grades[r][c];
cout << setw(5) << grades[r][c] << " ";
count = count + grades[r][c];
}
return count;
}
float calculateAvgAndGrade(int count){
return float(count)/AMOUNTOFGRADES;
}
void header(){
cout << setw(15) << " Names " << setw(20) << "Grades " << setw(18) << "Avg " << endl;
cout << setfill('-') << setw(53) << '-' << endl << setfill(' ');
}
答案 0 :(得分:1)
在readInGrades()中,r
被用作未初始化的索引来写入undefined behavior的grades[r][c]
。因此r
可能有任何值,并可以写入内存中的任意位置。有时这会破坏堆栈并触发分段错误。解决这些错误的有用工具是AddressSanitizer,可以通过使用-fsanitize = address进行编译在clang或gcc中启用,或者,如果使用Xcode,则有an option for it。另一个很棒的工具是valgrind。
答案 1 :(得分:0)
我认为:
输入>>成绩[r] [c];
r-未初始化。