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

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

2013-03-27 
急求大牛啊,这个简单的链表到底在哪出错了#include stdio.h#include stdlib.hstruct list {char strs

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

#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估计没啥问题,第二次应该会有问题了

热点排行