проблема malloc при записи в файл - PullRequest
0 голосов
/ 01 декабря 2010

Мусорные данные появляются всякий раз, когда я записываю данные в текстовый файл ... Почему это так?Вот мой код ... Спасибо

int main(void)
{
   unsigned int option = 0;
   int i = 0;
   }
   getch();
   while(option != 5){
      option = display(); 
      switch(option){
          case 5: save();
                  break;        
      }
       for(i = 0; i < recordCtr; i++){
         free(array[i]);}  
   } 
}  

save(){
     FILE *stream = NULL;
     stream = fopen("student.txt", "wt");
     printf("\nSaving the student list directory. Wait a moment please...");
             int i =0;
                 for (i=0; i<3; i++){
                    fprintf(stream, "%5s %30s %5s\n", array[i]->studentID, array[i]->name, array[i]->course);
                 }
     fclose(stream);                     
}

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

Есть некоторые ошибки.

  1. recordCtr всегда увеличивается.Если я решил добавить 2 раза, тогда вы заполняете массив [0], массив [1] и массив [2].Но когда вы освобождаете память, вы освобождаете до значения recordCtr.В этом случае вы можете освободить до 6 студенческих записей.Это может быть катастрофа.
  2. Как только выключатель закончится, вы освобождаете память записей учеников.Если пользователь решает выйти, вызывается функция save (), которая пытается сохранить записи учеников, которые уже освобождены.Это плохая идея читать из освобожденной памяти.

Когда вы видите мусорные данные.Я имею в виду под каким входом?

0 голосов
/ 01 декабря 2010

Вы никогда не выделяете память для struct student *array[MAX];

Я думаю, это перезаписывает ваши данные, может быть?

strcpy(array[0]->studentID, dummy);

studentID - это символ [5], а dummy - символ [30]. Прошло много времени с тех пор, как я использовал C для m, но вы могли уничтожить другие данные.

...