读书人

急求大牛啊这个容易的链表到底在哪出错

发布时间: 2013-03-27 11:22:42 作者: rapoo

急求大牛啊,这个简单的链表到底在哪出错了

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

struct list {
char str;
struct list * next;
};

int main()
{
struct list * head = NULL;
struct list * prev,* current;
char input;

while(scanf("%c",&input) && input != '#'){
current = (struct list *)malloc(sizeof(struct list));
if(head == NULL)
head = current;
else
prev->next = current;
current->next = NULL;
current->str= input;
prev = current;
}

if(head == NULL)
printf("NO DATA\n");
else
printf("the string:\n");
current = head;
while (current != NULL){
printf ("%c",current->str);
current = current->next;
}
current = head;
while (current != NULL){
free(current);
current = current->next;
}
printf("\n");

return 0;
}




VC6.0编译完也输出了 但是怎么出现了一个框Debug Assertion Failed!然后程序停止工作了
求各位大牛给我解释下啊,小弟感激不尽啊,我无语啊,在这上边纠结几天了,看了好多链表
也没看出来,有的说是内存泄露,不明白啊 怎么解决,急啊啊啊啊! struct list
[解决办法]
问题出在这里啊

while (current != NULL){
free(current);
current = current->next;
}

你都把这个指针所指向的内存释放了,下面怎么又使用了呢?
建议如下:

while (current != NULL){
prev=current->next;
free(current);
current = prev;

[解决办法]
用debugger单步跟一跟。

[解决办法]
1楼应该是对的,free后就释放掉了
[解决办法]
楼主可以在第44行设置个断点,
看看程序走到这个断点后,为什么free的时候会出问题。
你这样第一次free估计没啥问题,第二次应该会有问题了

读书人网 >C语言

热点推荐