返回指针的函数在外部用完这个指针后,用不用释放?
这个返回指针的函数应该如何编写?下面两种情况会有内存问题吗?(只是例子而已) 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);
//这个应该会有内存漏洞。 那么返回指针的函数是不是只能返回全局变量的指针 或者 函数内声明,函数外释放
这个返回指针的函数应该如何编写?下面两种情况会有内存问题吗?(只是例子而已) 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);
//这个应该会有内存漏洞。 那么返回指针的函数是不是只能返回全局变量的指针 或者 函数内声明,函数外释放
{
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;
第一种方法严重错误!
但是如果象你第二个函数, 那只有外部释放了。你可以改为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返回它需要的内存的空间大小。 然后你再调用根据这个大小重新分配内存, 再调用他的函数。他这么做, 看起来很麻烦。 但也避免了很多内存泄漏方面的问题。 也是为了遵守”内存分配应该是谁分配,谁释放”这个规则