社区
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;
}
...全文
58
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;
经典的java
小程序
源代码合集
这个“经典的java
小程序
源代码合集”包含了164个精心设计的程序示例,涵盖了各种类型的小游戏和实用工具,如五子棋、俄罗斯方块、扫雷以及聊天程序。这些程序是学习Java编程语言及其应用的宝贵资源,不仅能让初学者...
显示Visual Studio试用版序列号输入框
小程序
显示Visual Studio试用版序列号输入框
小程序
,解决Visual Studio 2005和Visual Studio 2008 90天试用版不能显示序列号输入框的
问题
50道JAVA基础编程练习题
【程序 1】 题目:古典
问题
:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析:这道题目考察了数列的概念,...
修复“错误提示内存不能为read”的工具
这个
问题
我以前也遇到过不知道怎么解决 现在终于有办法了!呵呵! 我们就看看是什么原因引起的吧,另外附送一个小工具修复见下面附件 总结下大概以下9个原因 1、驱动不稳定,与系统不兼容,这最容易出现内存不能为...
DirectX修复工具 V3.3标准 绿色版
可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章