• 全部
  • 问答

求救!!一个关于函数返回堆对象指针的问题 帮忙的朋友给高分,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,这个指针的作用域是从哪儿到哪儿?
请各位大哥解答。
...全文
33 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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了!!!!!!!!
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-03-19 09:32
社区公告
暂无公告