c语言链表容易犯的错误,急求大牛啊这个容易的链表到底在哪出错了

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

#include 

#include 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值