Почему моя функция выдает ошибку сегментации (дамп ядра) при перераспределении указателя на массив и чтении из файла? - PullRequest
0 голосов
/ 28 апреля 2020

Функция чтения номеров из файла и перераспределения памяти следующая:

int readGrades(GRADE **grades, size_t *numberOfGrades){
  FILE *data=fopen("data.txt", "r");
  if(data==NULL){
    fprintf(stderr,"Could not open the file.\n");
    return 1;
  }
  for(size_t i=0;fscanf(data,"%d %d", &((*(grades)[i]).number), &((*(grades)[i]).finalGrade))==2;i++){
    (*numberOfGrades)++;
    *grades=realloc(*grades, (*numberOfGrades)*GRADE_TYPE_SIZE);
    if(*grades==NULL){
      fprintf(stderr,"There was an error allocating memory at line %d.\n", __LINE__);
      return 2;
    }
  }
  (*numberOfGrades)--;
  *grades=realloc(*grades, (*numberOfGrades)*GRADE_TYPE_SIZE);
  if(*grades==NULL){
    fprintf(stderr,"There was an error allocating memory at line %d.\n", __LINE__);
    return 2;
  } 
  if(fclose(data)){
    fprintf(stderr,"Could not close the file.\n");  
    return 1;
  }
  return 0;
}

Вызов

int error=readGrades(&grades, &numberOfGrades);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...