不断收到此细分错误:11错误

时间:2020-09-09 06:31:53

标签: c++ arrays visual-studio multidimensional-array error-handling

我一直在我的代码上收到此错误。几分钟前,我的程序就完美地运行了,突然间,它一直向我抛出此错误。我试图通过在某些行之间使用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(' ');
}

2 个答案:

答案 0 :(得分:1)

在readInGrades()中,r被用作未初始化的索引来写入undefined behaviorgrades[r][c]。因此r可能有任何值,并可以写入内存中的任意位置。有时这会破坏堆栈并触发分段错误。解决这些错误的有用工具是AddressSanitizer,可以通过使用-fsanitize = address进行编译在clang或gcc中启用,或者,如果使用Xcode,则有an option for it。另一个很棒的工具是valgrind

答案 1 :(得分:0)

我认为:

输入>>成绩[r] [c];

r-未初始化。