为什么程序会出错?

Sha*_*dli -1 c++

当我编译它时,它说学生格拉德斯没有初始化.有什么问题?

#include <iostream>
    using namespace std;
    int takeGrade1(int *grades) {
        int i, noStudents;
        cout << "No of students: ";
        cin >> noStudents;
        grades = new int[noStudents];
        for (i = 0; i < noStudents; i++) {
            cout << "Enter the grade: ";
            cin >> grades[i];
        }
        return noStudents;
    }
    int main() {
        int *studentGrades, no, i;
        no = takeGrade1(studentGrades);
        cout << endl << "Grades: " << endl;
        for (i = 0; i < no; i++)
            cout << studentGrades[i] << endl;
        delete[]studentGrades;
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

当我编译它时,它说学生格拉德斯没有初始化.

这说实话!该studentsGrades变量尚未初始化,并且您将其值作为参数传递给takeGrade1方法.

有什么问题?

那么,使用尚未初始化的变量值的问题是您使用的是未定义的值.程序的运行时行为将是不可预测的.在这种情况下,它可能会因"分段违规"而崩溃.

事实上,你不应该传递价值studentGrades.你应该通过它的地址; 例如改变

 int takeGrade1(int *grades)
Run Code Online (Sandbox Code Playgroud)

 int takeGrade1(int *& grades)
Run Code Online (Sandbox Code Playgroud)

并更改通话,等等.或者,更改方法,使其>>返回<<数组,等等.