Отказ от ответственности: Это мой первый вопрос о StackOverflow, и я новичок-программист, поэтому заблаговременно извиняюсь, если вы потрясены моим кодом или если я не опубликую свой вопрос надлежащим образом.(C) Не удается найти причину ошибки ядра с динамическим распределением
В любом случае, я работаю над учебным пособием с динамически распределенными структурами. Я разделил класс на три структуры: структуру студента (имя студента, идентификатор студента), структуру курса (название курса, идентификатор курса) и структуру регистрации (идентификатор студента, идентификатор курса, класс).
Проблема: Я могу ввести столько баллов, сколько мне нужно без ошибок для первого ученика. Когда я пытаюсь ввести оценку для второго студента, я сбрасываю базовый файл. Я проверил все переменные, чтобы увидеть, соответствуют ли они моей функции, и они есть. Ниже приведена моя структура Enroll и моя функция добавления класса.
typedef struct {
int Student_ID;
int Course_ID;
int *Grade;
int GradeCount;
} Enroll_Database;
Функция ...
void addGrade(Enroll_Database *Enroll)
{
int i = 0, j = 0, b, Course_Num, Student_Num, Grade;
printf("Enter Course Number: ");
scanf("%d", &Course_Num);
printf("Enter Student ID: ");
scanf("%d", &Student_Num);
/* For loop that traverses through the Enroll array until until it encounters
nothing in the Course ID */
for(i = 0; Enroll[i].Course_ID != 0; i++)
{
/* if the Student Number and the Course Number are equal to their
appropriate Enroll element, then ask user to input Grade */
if(Enroll[i].Student_ID == Student_Num && Enroll[i].Course_ID == Course_Num)
{
printf("Enter Grade: ");
scanf("%d", &Grade);
if(Enroll[i].GradeCount == 0)
{
Enroll->Grade = (int *) malloc(sizeof(int));
Enroll[i].Grade[Enroll[i].GradeCount] = Grade; //core dumps
Enroll[i].GradeCount++;
}
else
{
Enroll->Grade = (int *) realloc(Enroll->Grade, sizeof(int));
Enroll[i].Grade[Enroll[i].GradeCount] = Grade; //core dumps
Enroll[i].GradeCount++;
}
}
}
}
Я провел несколько проверок и дамп происходит после того, как я таНос/перераспределить и назначить пользовательский ввод к значению класса в структуре ПРИЕМА.
Я был бы очень признателен за любую помощь, и я сожалею об этом, если мой код не читается или я отформатирован неправильно. Спасибо!
У меня есть это, чтобы работать без проблем. Спасибо! Я рассмотрю настройку своего кода на ваши рекомендации. – stancharoen