24小时热门版块排行榜    

查看: 909  |  回复: 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:58
再啰嗦一下过程吧:

写越界发生在strcpy,然后发现的时间是在delete调用_CrtCheckMemory后~
10楼2011-11-04 17:20:01
已阅   回复此楼   关注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的回帖
信息提示
请填处理意见