主题:高手新手都进来看看!
ipqyygyqd
[专家分:620] 发布于 2009-12-26 18:11:00
char* aaaa()
{
//申请内存空问!
........
........
}
int main()
{
char* a = aaaa();
其它操作;
return 0;
}
怎么写出像aaaa这样的函数返回的地址不用我们手动释放的?
回复列表 (共9个回复)
沙发
ipqyygyqd [专家分:620] 发布于 2009-12-26 19:44:00
现在求作业的人多了. 一个小问题没有人愿意帮忙!
板凳
sharp19 [专家分:1410] 发布于 2009-12-26 22:03:00
用auto_ptr
3 楼
sharp19 [专家分:1410] 发布于 2010-01-03 00:55:00
sorry,错了,auto_ptr不支持数组分配.自己写了一个如下:
[code=c]
#include <iostream>
using namespace std;
class Char_ptr
{
public:
Char_ptr(int n=0)
:_ptr(new char[n]){}
char * ptr()
{return _ptr;}
~Char_ptr()
{
cout<<"deleting Char_ptr..."<<endl; //测试用
delete []_ptr;
}
private:
char *_ptr;
};
char * fun()
{
static Char_ptr ptr(10); //静态储存
char *p=ptr.ptr();
for(int i=0; i<10; i++)
p[i]='a'+i;
return p;
}
int main()
{
char *p=fun();
for(int i=0; i<10; i++)
cout<<p[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
[/code]
如果说是char *型,则也可直接用String类,楼主不妨试一下,我就不写了.
4 楼
eastcowboy [专家分:25370] 发布于 2010-01-03 02:49:00
释放的方式要与分配的方式相对应。如果用是malloc/calloc/realloc分配内存,那就要用free来释放内存。如果是用new分配内存,那就要用delete来释放内存。如果是调用某个函数别人写的函数来分配内存,那就看他的说明,应该如何释放内存。
用static定义出来的数组,有的人也把它叫做“分配内存”,但这样的内存是不需要我们手工释放的。
[code=c]char* aaaa()
{
static char memory_space[300];
return memory_space;
}[/code]
另外,程序退出的时候会自动释放所有分配的内存,自动关闭所有打开的文件,因此如果是比较小的程序,也就不需要特别在意内存释放问题。
to sharp19:
我喜欢直接用vector来作动态的数组,免去了自己一份代码的麻烦。在构造函数中可以指定大小,也可以通过resize来修改。还有insert和push_back等。在析构函数中自动释放内存,不需要手工管理。
5 楼
sharp19 [专家分:1410] 发布于 2010-01-03 18:41:00
关键是人家申请的可能是堆区的大量空间哦~~~~
6 楼
ipqyygyqd [专家分:620] 发布于 2010-01-04 23:17:00
4楼的方法可行. 我今天才想到. 怎么当时就没早想到呢!!!!!! 真悲哀阿!
7 楼
znilpb [专家分:0] 发布于 2012-11-07 11:37:00
先看下。。。。。。。。。。。
[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]
8 楼
tron1992 [专家分:0] 发布于 2012-11-08 19:50:00
牛仔你不开OPENGL的教程了吗?好可惜..
9 楼
jennifer87 [专家分:0] 发布于 2012-11-09 18:04:00
看看,理理……
我来回复