写入文件时的malloc问题

时间:2010-12-01 01:47:28

标签: c malloc printf

每当我在文本文件中写入数据时都会出现垃圾数据......为什么会这样? 这是我的代码......谢谢

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 个答案:

答案 0 :(得分:3)

有一些错误。

  1. recordCtr始终递增。如果我选择添加2次,则填充数组[0],数组[1]和数组[2]。但是当你释放内存时,你可以释放出recordCtr值。在这种情况下,您最多可以释放6个学生记录。这可能是灾难。
  2. 一旦开关结束,您就可以释放学生记录内存。如果用户选择退出,则save()会被尝试保存已经释放的学生记录。从释放的内存中读取它是个坏主意。
  3. 你什么时候看到垃圾数据。我的意思是在什么输入?

答案 1 :(得分:0)

您永远不会为struct student *array[MAX];

分配内存

我认为这可能会覆盖您的数据?

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

studentID是char [5],dummy是char [30]。使用C代表m已经有一段时间了,但你可能会粉碎你的其他数据。