社区
C语言
帖子详情
这个小程序有问题吗?
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
打赏
收藏
这个小程序有问题吗?
#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; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
C语言
69,382
社区成员
243,074
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章