| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1398 人关注过本帖
标题:new的问题?
只看楼主 加入收藏
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
 问题点数:0 回复次数:17 
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; //不是说 不能返回函数中的局部指针和引用吗? 那为什么这样可以呢? (希望我没记错)
}
搜索更多相关主题的帖子: new 
2008-10-09 20:04
很远的那颗星
Rank: 2
等 级:新手上路
威 望:4
帖 子:544
专家分:0
注 册:2008-6-30
收藏
得分:0 
return ptr; //不是说 不能返回函数中的局部指针和引用吗? 那为什么这样可以呢? (希望我没记错)
你使用的是动态存储分配,使用的是堆内存...这个是要手动释放的..即delete ...
否则它将直到main()结束时才释放...er~~希望我也没记错...

Fighting~~~~~~~~
2008-10-09 21:26
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
LZ明显的内存泄漏了....
要释放ptr的...
之所以能返回就是因为你没释放,所以它的生命周期也没结束吧...

2008-10-09 22:05
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
哦 谢谢了
什么是 内存泄露啊?  我这个 代码 那里 内存泄露啊?
那 动态 分配的 []中的数 不管是多少都能正确输出,为什么? 甚至不定义为数组也能正确输出

[[it] 本帖最后由 newyj 于 2008-10-9 22:06 编辑 [/it]]
2008-10-09 22:05
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
例如?

2008-10-09 22:06
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
char* ptr=new char[strlen(i)+strlen(j)+1];  
就是这句啊
2008-10-09 22:07
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
我想你不定义为数组也能输出的,无非是开一个变量的空间的那种情况吧.....

2008-10-09 22:07
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
哦,不好意思,我没看程序中的问题...
我看一下..

2008-10-09 22:08
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
那我在 main函数中delete ptr 不知道 能否 释放掉
2008-10-09 22:17
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
我说一下哈,
你nwefuc函数中的,char* ptr=new char[strlen(i)+strlen(j)+1];
动态分配空间却没释放,系统是不会自动为你释放的,这就是内存泄漏...
因为你只分配内存却不回收,这样操作多了,内存就会耗尽,系统会崩溃....
建议你找些这方面的资料看一下...

2008-10-09 22:18
快速回复:new的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035985 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved