返回指针的函数在外部用完这个指针后,用不用释放? 
这个返回指针的函数应该如何编写?下面两种情况会有内存问题吗?(只是例子而已) char* getString() 

char str[128]; 
strcpy(str,"You Are welcome."); 
return str; 

//Using it 
char *ptr; 
ptr = getString(); 
printf("%s",ptr); 
//////这样有没有在返回的ptr还没有用时,str就有可能被释放的问题?(getString返回,str随着被释放) char* getString() 

char *str; 
str = new char(128); 
strcpy(str,"You Are welcome."); 
return str; 

//Using it 
char *ptr; 
ptr = getString(); 
printf("%s",ptr); 
//这个应该会有内存漏洞。 那么返回指针的函数是不是只能返回全局变量的指针 或者 函数内声明,函数外释放

解决方案 »

  1.   

    char* getString() 

    char *str; 
    str = new char(128); 
    strcpy(str,"You Are welcome."); 
    return str; 

    //Using it 
    char *ptr; 
    ptr = getString(); 
    printf("%s",ptr); 
    //这个应该会有内存漏洞。
    在后面加
    delete ptr;
    ptr = NULL;
    第一种方法严重错误!
      

  2.   

    原则上是“内存分配应该是谁分配,谁释放”
    但是如果象你第二个函数, 那只有外部释放了。你可以改为bool getString( char *str, int& nLen ) 

    strcpy(str,"You Are welcome."); 
    return str; 
    } //Using it 
    char *str; 
    str = new char(128); getString(str, 128); 
    printf("%s",ptr); 微软的sdk经常这么做:
    你需要在外面分配给它, 然后调用他的函数, 如果你分配的空间(譬如128)不够。 
    函数返回失败, 并通过nLen返回它需要的内存的空间大小。 然后你再调用根据这个大小重新分配内存, 再调用他的函数。他这么做, 看起来很麻烦。 但也避免了很多内存泄漏方面的问题。 也是为了遵守”内存分配应该是谁分配,谁释放”这个规则