真纳闷!

heimeng 2008-05-30 11:17:00
free函数,vc6

比如说这样:

#include "stdio.h"
#include "stdlib.h"

#ifndef NULL
#define NULL 0
#endif

typedef struct family
{
char *name;
int age;
struct family*next;
}FAM;

void main(void)
{
FAM *lb=(FAM*)malloc(sizeof(FAM));
lb->name="sdljflsd";
lb->age=111;
lb->next=NULL;

FAM*newp=(FAM*)malloc(sizeof(FAM));
newp->name="sdfjklsdjflk";
newp->age=222;
newp->next=NULL;

lb->next=newp;

for(;lb!=NULL;lb=lb->next)
free(lb);          //调试到这里第二次free释放就弹错误窗口,为何?
}
...全文
140 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lixun_21 的回复:]
这里不需要给name分配空间吧!因为它指向的常量字符串,在专门的内存区域。
[/Quote]
看来刚才是糊涂了,呵呵。谢谢。
lixun_21 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
FAM *lb=(FAM*)malloc(sizeof(FAM));
lb->name="sdljflsd"; // 没给name分配空间,name是个野指针
[/Quote]这里不需要给name分配空间吧!因为它指向的常量字符串,在专门的内存区域。
错误原因如2楼所说,楼主先释放了lb,lb->next也就成了一个野指针了 再释放它肯定会出错拉
langkejx 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 artman 的回复:]
释放顺序不对!
应该从链表末端反向释放!
[/Quote]

应该从链表末端开始释放
像你那样释放肯定会出现next为空,那么你的第二个节点没有被释放掉
artman 2008-05-30
  • 打赏
  • 举报
回复
释放顺序不对!
应该从链表末端反向释放!
brookmill 2008-05-30
  • 打赏
  • 举报
回复
FAM *lb=(FAM*)malloc(sizeof(FAM));
lb->name="sdljflsd"; // 没给name分配空间,name是个野指针

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧