回 帖 发 新 帖 刷新版面

主题:高手新手都进来看看!

char* aaaa()
  {
      //申请内存空问!
      ........
      ........
  }
  int main()
  {
    char* a = aaaa();
    其它操作;
    return 0;
  }
  怎么写出像aaaa这样的函数返回的地址不用我们手动释放的?

回复列表 (共9个回复)

沙发

现在求作业的人多了. 一个小问题没有人愿意帮忙!

板凳

用auto_ptr

3 楼

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 楼

释放的方式要与分配的方式相对应。如果用是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 楼

关键是人家申请的可能是堆区的大量空间哦~~~~

6 楼

4楼的方法可行. 我今天才想到. 怎么当时就没早想到呢!!!!!! 真悲哀阿!

7 楼

先看下。。。。。。。。。。。

















[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]

8 楼


牛仔你不开OPENGL的教程了吗?好可惜..

9 楼

看看,理理……

我来回复

您尚未登录,请登录后再回复。点此登录或注册