这个小程序有问题吗?

HKer_007 2002-09-06 07:25:03
#include ......

char * str;

char * getstr()
{
str = new char [100];
strcpy(str, "This is a test.");
return str;
}

void main()
{
char * p;
p = new char [100];

p = getstr;

delete [] p;
}
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
glassshark 2002-09-07
  • 打赏
  • 举报
回复
//这样可以,不过在不同的可见域里申请和释放堆空间不是一个好习惯,建议修改getstr函数,将其所需的内存由调用者来申请和释放。
#include ......

char * str;

char * getstr()
{
str = new char [100];
strcpy(str, "This is a test.");
return str;
}

void main()
{
char * p;
p = getstr;
delete [] p;
}
ningzhiyu 2002-09-06
  • 打赏
  • 举报
回复
p = getstr;应该是p = getstr();吧

vixkywx(vicky) 说的对
程序共申请了200的char大小的空间,只是释放了其中的100个
造成100的leak。

char *q;
q=p;
p = getstr();
printf("%ld,%ld,%ld\n",p,q,p-q);
会发现p-q的值是104。他们的地址是不一样的。
liushmh 2002-09-06
  • 打赏
  • 举报
回复
看来,我还是没有考虑全面。;(
vixkywx 2002-09-06
  • 打赏
  • 举报
回复
#include ......

char * str;

char * getstr()
{
str = new char [100]; //申请了str
strcpy(str, "This is a test.");
return str;
}

void main()
{
char * p;
p = new char [100]; //申请了p

p = getstr; //p指向的空间已经无法访问了

delete [] p; //p和str是同一地址,所以p和str都不能用了
//原来指向p的内存没释放
}
liushmh 2002-09-06
  • 打赏
  • 举报
回复
哦,请原谅我拙劣的表现
p = getstr;//改为strcpy(p,str);
由于全局变量在程序结束后会自动释放内存
又由于delete []p;
这样会导致str指向的内存被释放两遍。
liushmh 2002-09-06
  • 打赏
  • 举报
回复
sorry,我看错了,好像没有错误。
zongta 2002-09-06
  • 打赏
  • 举报
回复
不需要给p 分配100个空间
liushmh 2002-09-06
  • 打赏
  • 举报
回复
char * getstr()
{
str = new char [100];
strcpy(str, "This is a test.");
return str;//返回了局部变量,内存已经释放了
}
p = getstr();//导致此处有问题,p指向了一块释放的内存。

puppet 2002-09-06
  • 打赏
  • 举报
回复
有问题

p = new char [100];//内存没有释放

p = getstr;

69,382

社区成员

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

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