求救!!一个关于函数返回堆对象指针的问题 帮忙的朋友给高分,up的兄弟也有分(明天下午结帖)

shanweibing 2003-03-19 09:32:55
小弟近日看钱能的c++程序设计教程,在友元函数那章遇到一个问题。(源程序如下)

#include<iostream.h>
#include<string.h>
class student
{ public:
student(char * pname);
~student();
protected:
static student *pfirst;
student *pnext;
char name[40];
};
student * student::pfirst=0;
student::student(char * pname)
{ strncpy(name,pname,sizeof(name));
name[sizeof(name)-1]='\0';
pnext=pfirst;
pfirst=this;
}
student::~student()
{ cout<<this->name<<endl;
if(pfirst==this)
{pfirst=pnext; return; }
for(student* ps=pfirst;ps;ps=ps->next)
if(ps->next==this)
{ ps->next=pnext; return; }
}
student * fn()
{ ftudent *ps=new ftudent("jenny");
ftudent sb("jone");
return ps //就是这行有问题!!!!!!!!!!

}

void main()
{ ftudent sa("jamsa");
ftudent *sb=fn();
ftudent sc("tracey");
delete sb;
}

我的问题是在fn()函数中能不能返回ps,这个指针的作用域是从哪儿到哪儿?
请各位大哥解答。
...全文
62 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cenlmmx 2003-03-20
  • 打赏
  • 举报
回复
楼主还没结帖啊,给分吧.
shanweibing 2003-03-20
  • 打赏
  • 举报
回复
感谢各位的解答!
sunyard 2003-03-19
  • 打赏
  • 举报
回复
用栈分配也不一定会出问题。

return 一个临时的对象,比如
student fn()
{
student sb("jone");
return sb;
}
只要重载 operator =,也不会出错的。
2benjemin 2003-03-19
  • 打赏
  • 举报
回复
:)
skysea88 2003-03-19
  • 打赏
  • 举报
回复
up
cenlmmx 2003-03-19
  • 打赏
  • 举报
回复
同意楼上看法,ps从函数里返回时生成一个临时指针,赋值给*sb.
main中可以得到ps所指的地址空间。如果函数中是用栈分配的话,就不行了。
ysqu 2003-03-19
  • 打赏
  • 举报
回复
up
whwjn 2003-03-19
  • 打赏
  • 举报
回复
没有问题,虽然ps的作用域只在fn函数里,但ps是指向堆中分配的内存 ,
只要没有delete,出了作用域仍然有效,后面在main中delete sb就是
释放这块内存的。
shanweibing 2003-03-19
  • 打赏
  • 举报
回复
不好意思,最后几行的student打成了ftudent了!!!!!!!!

69,369

社区成员

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

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