파일입출력 연결리스트 질문
글쓴이: ch0nn0m / 작성시간: 수, 2010/10/13 - 1:11오후
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"); }
Forums:
포인터 변수
휴... 다행히 더 공부하고 오라는 무책임한 리플이 아직 안올라왔군요;;
p,t 둘다 포인터 변수이기 때문에 값을 복사받는게 아니라 번지수만 받습니다. p,t 가 둘이 공통적으로 가리키는 어딘가의 메모리가 삭제되는 것이므로 저렇게 사용하는 것이 맞습니다.
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
댓글 달기