| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 361 人关注过本帖
标题:new的问题?
收藏  订阅  推荐  打印
newyj
Rank: 4
等级:高级会员
帖子:504
积分:5868
威望:2
注册:2008-1-4
new的问题?

#include<iostream>
using namespace std;
char* newfuc(const char*,const char*);

int main()
{
  char* pi="perfect ";
  char* pj="c++!";
  cout<<newfuc(pi,pj)<<endl;
  getchar();
  return 0;
}

char* newfuc(const char* i,const char* j)
{
  char* ptr=new char[strlen(i)+strlen(j)+1]; //[]中的数 不管是多少都能正确输出,为什么? 甚至不定义为数组也能正确输出.
  strcpy(ptr,i);
  strcat(ptr,j);
  return ptr; //不是说 不能返回函数中的局部指针和引用吗? 那为什么这样可以呢? (希望我没记错)
}
2008-10-9 20:04
很远的那颗星
Rank: 3Rank: 3
等级:中级会员
帖子:466
积分:4217
威望:2
注册:2008-6-30

return ptr; //不是说 不能返回函数中的局部指针和引用吗? 那为什么这样可以呢? (希望我没记错)
你使用的是动态存储分配,使用的是堆内存...这个是要手动释放的..即delete ...
否则它将直到main()结束时才释放...er~~希望我也没记错...

Fighting~~~~~~~~
2008-10-9 21:26
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

LZ明显的内存泄漏了....
要释放ptr的...
之所以能返回就是因为你没释放,所以它的生命周期也没结束吧...

闭关修炼中!......
2008-10-9 22:05
newyj
Rank: 4
等级:高级会员
帖子:504
积分:5868
威望:2
注册:2008-1-4

哦 谢谢了
什么是 内存泄露啊?  我这个 代码 那里 内存泄露啊?
那 动态 分配的 []中的数 不管是多少都能正确输出,为什么? 甚至不定义为数组也能正确输出

[ 本帖最后由 newyj 于 2008-10-9 22:06 编辑 ]
2008-10-9 22:05
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

例如?

闭关修炼中!......
2008-10-9 22:06
newyj
Rank: 4
等级:高级会员
帖子:504
积分:5868
威望:2
注册:2008-1-4

char* ptr=new char[strlen(i)+strlen(j)+1];  
就是这句啊
2008-10-9 22:07
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

我想你不定义为数组也能输出的,无非是开一个变量的空间的那种情况吧.....

闭关修炼中!......
2008-10-9 22:07
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

哦,不好意思,我没看程序中的问题...
我看一下..

闭关修炼中!......
2008-10-9 22:08
newyj
Rank: 4
等级:高级会员
帖子:504
积分:5868
威望:2
注册:2008-1-4

那我在 main函数中delete ptr 不知道 能否 释放掉
2008-10-9 22:17
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

我说一下哈,
你nwefuc函数中的,char* ptr=new char[strlen(i)+strlen(j)+1];
动态分配空间却没释放,系统是不会自动为你释放的,这就是内存泄漏...
因为你只分配内存却不回收,这样操作多了,内存就会耗尽,系统会崩溃....
建议你找些这方面的资料看一下...

闭关修炼中!......
2008-10-9 22:18
共有 360 人关注过本帖
发新话题
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.063162 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved