关于动态内存释放的问题
这是c primer plus上第十七章的一个示例程序的源代码:#include <stdio.h>
#include <stdlib.h> /* 提供 malloc() 原型 */
#include <stdring.h> /* 提供 strcpy() 原型 */
#define TSIZE 45 /* 存放片名的数组大小 */
struct film {
char title[TSIZE];
int rating;
struct film * next; /* 指向链表的下一个结构 */
};
int main (void)
{
struct film * head = NULL; /* 定义指向结构的头部指针 */
struct film * prev, * current;
char input[TSIZE];
/* 收集并存储信息 */
puts ("Enter first movet title : ");
while (gets(input) != NULL && input[0] != '\0')
{
/* 输入为真, malloc() 获取存储空间, 并将首地址赋给指针变量 current */
current = (struct film *) malloc (sizeof (struct film));
if (head == NULL) /* 判断是否第一个结构 */
head = current; /* head 指向分配后内存块的首地址 */
else /* 后续的结构 */
prev->next = current; /* 将下一个结构的首地址赋给前一个结构的 next 成员 */
current->next = NULL; /* 表示当前结构是列表中的最后一个 */
strcpy (current->title, input); /* 复制输入到结构内的成员*/
puts ("Enter your rating <0-10> : ");
scanf ("%d", ¤t->rating);
while (getchar() != '\n') /* 如果输入不 = 换行 */
continue;
puts ("Enter next movie title (empty line to stop) : ");
prev = current; /* 为下一轮输入做准备 */
}
/* 给出电影列表 */
if (head == NULL) /* 如果输入为空 */
printf ("No data entered ");
else
printf ("Here is the movie list : \n");
current = head; /* 设置 current 指向第一个结构 */
while (current != NULL) /* 循环过程 直到 指向为空字节 */
{
printf ("movie: %s Rating: %d \n", current->title, current->rating);
current = current->next; /* 重设 current 以指向列表中的下一个结构 */
}
/* 任务已完成, 因此释放所分配的内存 */
current = head;
while (current != NULL)
{
free(current);
current = current->next;
}
printf ("Bye \n");
return 0;
}
每一次运行程序最后都会有错误提示,如果把红色的部分去掉就没问题了。
动态分配内存后都应该释放掉,从理论上分析这段代码应该是没有问题的,可是为什么总是报错(我是在XP操作系统上用VC6.0运行的)?百思不得其解,望详解。