파일입출력 연결리스트 질문

ch0nn0m의 이미지

data라는 구조체가 존재하구요...제가 궁금한것은 저장한 파일을 다시 불러오는 구조에서 현재 메모리에 있는 연결리스트의 노드들을 모두 삭제하는 과정에서 이해가 잘 안되는데요...

void load()
{
 FILE *fp;
 data *t;
 data *p;
 fp=fopen("data.dat","r");
 t=head->next;
 while(t!=tail)
 {
  p=t;                            //t의 값을 p에다가 넣고 tail이 나올때까지 t의 다음으로 가며 p를 삭제하는건데
 
  t=t->next;                   //p를 삭제해봤자...어차피 t의 값은 그대로인데 하나마나 아닌지요?? 
 
  free(p);                      //p는 t의 값을 복사해 받을뿐 t의 값들은 계속 있는게 아닌가요?? 삭제하려면 t를 해야지 않나요??
 }
 head->next=tail;
 while(1)
 {
  t=(data*)malloc(sizeof(data));
  if(!fread(t, 40, 1, fp))
  {
   free(t);
   break;
  }
  t->next=head->next;
  head->next=t;
 }
 fclose(fp);
 printf("data.dat를 불러옴\n");
}

jos77의 이미지

휴... 다행히 더 공부하고 오라는 무책임한 리플이 아직 안올라왔군요;;
p,t 둘다 포인터 변수이기 때문에 값을 복사받는게 아니라 번지수만 받습니다. p,t 가 둘이 공통적으로 가리키는 어딘가의 메모리가 삭제되는 것이므로 저렇게 사용하는 것이 맞습니다.

-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr