函数定义如下:
char* CLogs::GetData()
{
char* date = new char[20];

/*赋值操作*/ return date;
}外部调用时:
  char* Data = GetData();因为有分配内存,但没有相应的delete,所以会有提示内存泄漏。请问这种情况下,这个内存空间应该如何释放?

解决方案 »

  1.   

    直接在外部delete[] Data我试过了,会报错。
      

  2.   

    不要返回局部变量的指针和引用,会出现不定的内存错误,推荐这样写:
    void CLogs::GetData( char *data )
    {
        data = new char[20];
        ....
    }
      

  3.   

    delete[]与delete []并无区别呀
      

  4.   

    tufaqing() 的方法我试了一个。在函数内部给传入的参数分配内存,函数结束后,这个外部的参数还是空指针啊
      

  5.   

    不好意思,要用指针的指针:void CLogs::GetData( char **data )
    {
        *data = new char[20];
        ....
    }调用的时候这样用:
    char * data;
    GetData( &data );
    ......
    delete[] data;
      

  6.   

    不要返回局部变量的指针和引用,会出现不定的内存错误,推荐这样写:
    void CLogs::GetData( char **data )
    {
        *data = new char[20];
        ....
    }
      

  7.   

    liounzhou(潇潇夜雨):"直接在外部delete[] Data我试过了,会报错。"并没有错误的地方啊,直接delete[] Data是正确的,可能你写错了。错误提示是什么?
    ================================================================
     tufaqing() :
    不要返回局部变量的指针和引用,会出现不定的内存错误,推荐这样写:
    void CLogs::GetData( char *data )
    {
        data = new char[20];
        ....
    }这一条规则在这里不适用,用new分配的内存空间可以用指针返回。
      

  8.   

    用std:string 或者CString的就省去这些麻烦了..string CLogs::GetData();
    或者void CLogs::GetData(string & s);当然第一种可能要多出一次以上字符串拷贝,所以如果数据量大或者性能比较重要就用第二种
      

  9.   

    直接用delete data不行吗我是这样用的好象没有内存泄漏问题嘛!
      

  10.   

    堆上空间,然后直接delete []data; 应该可以的