对c primer plus 第五版第十七章的film2.c 有点疑问啊先上代码/* films2.c -- using a linked list of str
对c primer plus 第五版第十七章的film2.c 有点疑问啊 先上代码
/* films2.c -- using a linked list of structures */ #include <stdio.h> #include <stdlib.h> /* has the malloc prototype */ #include <string.h> /* has the strcpy prototype */ #define TSIZE 45 /* size of array to hold title */
struct film { char title[TSIZE]; int rating; struct film * next; /* points to next struct in list */ };
int main(void) { struct film * head = NULL; struct film * prev, * current; char input[TSIZE];
/* Gather and store information */ puts("Enter first movie title:"); while (gets(input) != NULL && input[0] != '\0') { current = (struct film *) malloc(sizeof(struct film)); if (head == NULL) /* first structure */ head = current; else /* subsequent structures */ prev->next = current; current->next = NULL; strcpy(current->title, input); puts("Enter your rating <0-10>:"); scanf("%d", ¤t->rating); while(getchar() != '\n') break; puts("Enter next movie title (empty line to stop):"); prev = current; }
/* Show list of movies */ if (head == NULL) printf("No data entered. "); else printf ("Here is the movie list:\n"); current = head; while (current != NULL) { printf("Movie: %s Rating: %d\n", current->title, current->rating);
current = current->next; }
/* Program done, so free allocated memory */ current = head; while (current != NULL) { free(current); current = current->next; } printf("Bye!\n");
return 0; }
free函数最后释放current所指向的内存单元,就是把对内存的控制权限返还给操作系统了,但是,紧接着后面又通过current访问next(即current->next),这我就不怎么明白了。free函数将内存释放后,current还能指向分配的内存并访问其中的量吗? C 内存 [解决办法] 首先这样用是非法的,但是确实可以用,free会吧内存返还给操作系统,但是呢那个地方存储的内容是没变的,暂时可以用。 就像你删除文件,文件那快地方就变成可以了,但不表示操作系统会去清空里面的内容。 所以free之后最好让current = NULL;以防产生野指针。 [解决办法]