关于链表的问题!

Source_Code 2005-02-12 08:36:42
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
typedef struct Node //定义一个结点结构类型
{ int num;
char name[10];
float score;
struct Node *next;
} stNode;
stNode *head; //将头指针设为全局变量

void initStLink() //初始化链表
{ head=NULL;
}

void CreateStLink() //创建学生成绩信息链表
{ int num;
char name[10];
float score;
stNode *s,*p;
while(1)
{ s=new stNode;
if(!s)
{cout<<"\nApplition Memory falied!\n";
exit(-1);
}
cout<<"Input num,name,score:\n";
cin>>num>>name>>score;
if(num==0) break;
s->num=num;
strcpy(s->name,name);
s->score=score;
if(!head)
head=s;
else
p->next=s;
p=s;
}
p->next=NULL;
delete s;
}

void dispStLink() //输出链表信息
{stNode *p=head;
cout<<setw(6)<<"num";
cout<<setw(12)<<"name";
cout<<setw(10)<<"score"<<endl;
while(p)
{ cout<<setw(6)<<p->num;
cout<<setw(12)<<p->name;
cout<<setw(10)<<p->score<<endl;
p=p->next;
}
}

void main()
{ initStLink();
CreateStLink();
cout<<"\nCreated StLink List:\n";
dispStLink();
}

上面的程序创建学生成绩信息链表的函数最后释放了s的申请的内存,为什么不会出错而且还能够输出呢?请高手指点
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Source_Code 2005-02-13
  • 打赏
  • 举报
回复
为什么指针p不用动态空间管理呢?
pcboyxhy 2005-02-13
  • 打赏
  • 举报
回复
释放之后那个地方的值还是不变的,
指针的值也不会变,
恰好指向的那片地址没有被其他程序使用,
也就是说内容没有被改写,
只要没有被改写,
它就可以用,
请在free一块内存后,立即把指针赋值为NULL
Salam2001 2005-02-12
  • 打赏
  • 举报
回复
应该是碰巧了...
healer_kx 2005-02-12
  • 打赏
  • 举报
回复
太长的程序了。
chenyu17094256 2005-02-12
  • 打赏
  • 举报
回复
你在问什么?

为什么不会出错?您希望他出错吗?
zhengwei1984222 2005-02-12
  • 打赏
  • 举报
回复
void CreateStLink()中只是delete了最后一个结点,delete只是标记该内存可用并加入可用堆内存,所以其值有可能不会消失,因此在void dispStLink()中仍有可能遇null结束

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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