首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

free()和链表的使用出错解决办法

2012-03-23 
free()和链表的使用出错小弟在C primer plus上面看到一个例子,可是在vs2010中运行它时却出错了。#includes

free()和链表的使用出错
小弟在C primer plus上面看到一个例子,可是在vs2010中运行它时却出错了。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#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 movie title:");
while((gets(input)!=NULL)&&(input[0]!='\0'))
{
current = (struct film *)malloc(sizeof(struct film));
if(head == NULL)
head = current;
else 
prev->next = current;
current->next = NULL;
strcpy(current->title,input);
puts("Enter your rating <1-10>:");
if((scanf("%d",&current->rating))==0)
{
puts("Enter error!");
exit(1);
}
while(getchar()!='\n')
continue;
puts("Enter next movie title (empty line to stop):");
prev = current;
}

if(head == NULL)
puts("No data enter!");
else
puts("Here is the movie list:");
current = head;
while(current != NULL)
{
printf("Movie: %s Rating: %d\n",current->title,current->rating);
current = current->next;
}
current = head;
while(current != NULL)
{
free(current);
current = current->next; /* error pointer! */
}
printf("Goodbye!\n");
return 0;
}
这个错误要如何解决啊,

[解决办法]
current = head;
while(current != NULL)
{
free(current);
current = current->next; /* error pointer! */
}
这段程序是有问题的,你已经释放了current,是不可以在使用了,在使用会出现未定义的(可能会是段错误)。改一下:
current = head;
struct file *p = NULL;
while(current != NULL)
{
p = current-> next;
free(current);
current = p;
}

[解决办法]
VC6.0下,CPP文件,无压力

热点排行