24小时热门版块排行榜    

查看: 1113  |  回复: 11
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

江湖小白生

新虫 (初入文坛)

[求助] C++求助

#include
#include
using namespace std;
char *getname(void);
int main()
{
  char *name;
  name=getname();
  cout<   delete[] name;
  name=getname();
  cout<   delete[]name;
  return 0;
}
char *getname()
{
char temp[80];
cout<<"enter the name:";
cin>>temp;
char *pn=new char(strlen(temp)+1);
strcpy(pn,temp);
return pn;
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-11-04 23:41:44
引用回帖:
6楼: Originally posted by ioadong at 2011-11-04 16:32:57:
你再看看那个错误提示框中的内容。清清楚楚的"heap buffer"
你说的是另外一个问题,即指针越界的问题,但这不是出现图中错误对话框的原因。
我特地复习了一下,new分配的变量一般都是在堆空间的。

the application wrote to memory after end of heap buffer.
就是写越界了

刚才说的你混淆了堆和栈,说的是有关“生命期”的理解的问题。
char *getname()
{
char temp[80];
cout<<"enter the name:";
cin>>temp;
char *pn=new char(strlen(temp)+1);//这里分配了局部指针
//虽然pn是局部指针,但是对于堆里面的内存,如果不delete掉或者进程结束,将一直处于“有生命”的状态
strcpy(pn,temp);
return pn;//这里返回这个指针,但是在函数返回后,这个变量的生命期已经结束了。
//嗯,虽然pn的生命期确实已经结束,但是,它的值指向的内存块的生命期还在
}
7楼2011-11-04 17:04:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 12 个回答

江湖小白生

新虫 (初入文坛)

运行结果是这样



2楼2011-11-04 11:10:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ioadong

木虫 (著名写手)

【答案】应助回帖


xzhdty(金币+1): 欢迎常来程序语言讨论 2011-11-04 22:25:58
char *getname()
{
char temp[80];
cout<<"enter the name:";
cin>>temp;
char *pn=new char(strlen(temp)+1);//这里分配了局部指针
strcpy(pn,temp);
return pn;//这里返回这个指针,但是在函数返回后,这个变量的生命期已经结束了。
}

这个函数返回了在堆中分配的临时指针pn。楼主好好看看教材上关于指针用法的注意点吧。
以科学的理性代替天然的非理性。
3楼2011-11-04 14:58:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

引用回帖:
3楼: Originally posted by ioadong at 2011-11-04 14:58:23:
char *getname()
{
char temp[80];
cout<<"enter the name:";
cin>>temp;
char *pn=new char(strlen(temp)+1);//这里分配了局部指针
strcpy(pn,temp);
return pn;//这里返回这个指针 ...

这个解释是不对的~你搞混了栈和堆
4楼2011-11-04 15:37:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +4 QUjhNVAcOSff 2026-09-13 5/250 2026-09-14 21:33 by vZfe6xYu34yj
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 QUjhNVAcOSff 2026-09-13 5/250 2026-09-14 21:25 by vZfe6xYu34yj
[博后之家] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 QUjhNVAcOSff 2026-09-13 5/250 2026-09-14 21:24 by vZfe6xYu34yj
[公派出国] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 QUjhNVAcOSff 2026-09-13 7/350 2026-09-14 21:21 by vZfe6xYu34yj
[考博] 上海工程技术大学激光智能制造课题组招收博士研究生 +4 两三岁ss 2026-09-14 4/200 2026-09-14 20:29 by 班主任的同桌
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 s3fFTmArrBt6 2026-09-14 3/150 2026-09-14 18:01 by Aj1rhIDL5ixY
[考博] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 s3fFTmArrBt6 2026-09-14 4/200 2026-09-14 17:49 by Aj1rhIDL5ixY
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 s3fFTmArrBt6 2026-09-14 4/200 2026-09-14 17:48 by Aj1rhIDL5ixY
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 LwdutQ8HoqWP 2026-09-13 5/250 2026-09-14 16:25 by Aj1rhIDL5ixY
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 LwdutQ8HoqWP 2026-09-13 4/200 2026-09-14 16:13 by Aj1rhIDL5ixY
[博后之家] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +4 3n8v2C8RimXI 2026-09-13 4/200 2026-09-14 15:57 by Aj1rhIDL5ixY
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +4 3n8v2C8RimXI 2026-09-13 4/200 2026-09-14 15:48 by Aj1rhIDL5ixY
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 3n8v2C8RimXI 2026-09-13 4/200 2026-09-14 15:45 by Aj1rhIDL5ixY
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +4 3n8v2C8RimXI 2026-09-13 4/200 2026-09-14 15:37 by Aj1rhIDL5ixY
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +5 QUjhNVAcOSff 2026-09-13 6/300 2026-09-14 15:21 by Aj1rhIDL5ixY
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 QUjhNVAcOSff 2026-09-13 3/150 2026-09-14 15:09 by Aj1rhIDL5ixY
[考博] 西北工业大学材料学院电化学传感与催化课题组招收2027年推免研究生、博士生、博士后 +3 马方园 2026-09-10 4/200 2026-09-14 09:29 by Chem张zz
[考博] 27秋季材料博士申请求助 10+3 Cahal1 2026-09-11 4/200 2026-09-14 08:50 by 北京莱茵编辑
[教师之家] 浙江师范大学是怎么坑我的 +10 recruit123 2026-09-09 15/750 2026-09-13 10:45 by seaskyy
[有机交流] 科研求助 10+4 我吃一只鱼 2026-09-07 4/200 2026-09-10 08:32 by 0940628
信息提示
请填处理意见